2017-02-13 1 views
4

У меня есть книга для C# (Csharp) Я знаю только немного, но я делаю Console.WriteLine материалC# Как быть в состоянии поставить «текст», как TEXT, и он все еще бежит Если

У меня есть не этот простой код здесь

Console.WriteLine("Please enter your name"); 

string name = Console.ReadLine(); 
if (name.Contains("no")) 
{ 
    Console.WriteLine("\nFine, don't put your name in"); 
} 
else 
{ 
    Console.WriteLine("\nHello, " + name); 
} 

в части If Если поставить «нет», очевидно, она работает («\ nFine, не ставьте свое имя») , но если вы поставите «нет», как «нет «NO» «nO» у него нет кода типа name.Contains, где не имеет значения, как вы поместите текст, который он запускает в любом случае

Как SmallBasic Text.ConvertToLowerCase преобразует ваш текст в нижний регистр, а затем запускает IF

Спасибо!

+5

'Contains' вернется true для «Juno», потому что «no» находится в «Juno». – juharr

ответ

2

Просто используйте метод name.ToLower(), который сделает текст строчным. Поэтому, когда вы проводите сравнение с «нет» или «да», вам не нужно беспокоиться о чувствительности к регистру ввода.

+1

Почему именно ToLower() в отличие от ToUpper()? Я думал, что ToUpper() всегда является предпочтительным методом? – confusedandamused

+2

До тех пор, пока вы согласны в своем использовании, они эквивалентны. –

+0

Использование 'ToLower' в порядке, но большая проблема с OPs заключается в том, что вместо этого они используют' Contains', а просто '==' или 'Equals', и это нужно указать. – juharr

7

Вы можете преобразовать входные данные в символы нижнего регистра:

if (name.ToLower().Contains("no")) 

Но почему бы вам не как имена, как «Тино» или «Нора»? Лучше сравнить всю строку вместо того, чтобы просто проверить, если он содержит "нет":

if (name.Equals("no", StringComparison.InvariantCultureIgnoreCase)) 
1

Используйте TOLOWER()

string name = Console.ReadLine(); 
    if (name.ToLower().Contains("no")) 
    { 
     Console.WriteLine("\nFine, don't put your name in"); 
    } 
    else 
    { 
     Console.WriteLine("\nHello, " + name); 
    } 
0

Самый простой способ сделать что-то вроде этого:

if (name.ToUpper().Contains("NO")) 
+0

Не использовать 'ToLower' - это больше проблема с языками, где выполнение' ToLower', а затем 'ToUpper' дает другой результат. В этом случае, поскольку вы не только знаете язык, но и слово, с которым вы сравниваете, все будет в порядке. В любом случае вы не должны использовать 'Contains' вообще. – juharr

13

Вам следует изменить Contains на номер Equals, если не имя типа Noel будет выдавать «Прекрасно не помещайте свое имя в»

if(name.Equals("no", StringComparison.CurrentCultureIgnoreCase)) 
{ 

} 
-1

Вы можете использовать метод .ToLower().

if(name.ToLower().Contains("no") 

Это приведет к изменению всех символов на нижний регистр.

+1

Я считаю, что вы были исключены из-за сильного синтаксического кода, который не является C#: капитал I в «if», строчный T в ToLower(), отсутствие закрывающей прантезиса, а также повторение чужого ответа, уже отправленного с правильным синтаксисом. – Forklift

1

Отвечу на оригинальный вопрос:

есть код, как name.Contains, где это не имеет значения, как вы поставите текст он работает в любом случае

Да:

bool contains = name.IndexOf("no", StringComparison.OrdinalIgnoreCase) >= 0; 

Смотреть больше информации и регистронезависимое StringExtension здесь: Case insensitive 'Contains(string)'

Однако, как указывали другие, Contains() предоставит вам много ложных срабатываний. Вместо этого вы должны использовать .Equals().

1

Используйте метод Equals для сравнения вашего значения вместо проверки на Contains.У вас есть три варианта выбора равенства, игнорируя случаи, которые игнорируются текущим случаем культуры, игнорируются случаи игнорирования и игнорируются порядковый регистр.

Ваша проблема, похоже, не является специфической для культуры, поэтому вы можете придерживаться StringComparison.CurrentCultureIgnoreCase. В то же время вы можете узнать различие его использование here

0

Если вы используете .Contains("no") он будет срабатывать, если чье-то имя не содержит «нет»

Вы можете использовать это:

if(name.ToLower().Equals("no")) 
{ 
    Console.WriteLine("\nFine, don't put your name in"); 
} 
Смежные вопросы