如何比较不区分大小写的字符串?
How to compare strings without case-sensitivity?
我正在编写一个代码,用户必须通过按 "y" 或 "n" 或编写 "yes" 或 "no" 来输入他是否想要某个功能, 不检查是否区分大小写(所以如果用户写 yES 或 Yes 它需要工作)。
此外,如果用户写了任何无效的东西,它会说这个选项无效,并再次要求用户select一个选项。
这是它的抽象:
static bool FeatureIsOn { get; set;}
static void Main()
{
bool optionIsValid;
do //Loops around until the option is valid
{
Console.WriteLine();
Console.Write("Enable Feature? [Y/N]: ");
string optionString = Console.ReadLine();
switch(optionString)
{
default:
Console.WriteLine("Invalid option.");
optionIsValid = false;
break;
case "Yes":
case "yes":
case "Y":
case "y":
FeatureIsOn = true;
optionIsValid = true;
break;
case "No":
case "no":
case "N":
case "n":
FeatureIsOn = false;
optionIsValid = true;
break;
}
} while (optionIsValid != true);
}
对每种可能的写法都有一个案例不是很有效"yes"。有更好的方法吗?
在检查之前将要检查的字符串转换为大写或小写:
static bool FeatureIsOn { get; set;}
static void Main()
{
bool optionIsValid;
do //Loops around until the option is valid
{
Console.WriteLine();
Console.Write("Enable Feature? [Y/N]: ");
string optionString = Console.ReadLine();
// convert string to uppercase
optionString = optionString.ToUpper();
switch(optionString)
{
case "YES":
case "Y":
FeatureIsOn = true;
optionIsValid = true;
break;
case "NO":
case "N":
FeatureIsOn = false;
optionIsValid = true;
break;
default:
Console.WriteLine("Invalid option.");
optionIsValid = false;
break;
}
} while (optionIsValid != true);
}
您可以使用 String.ToUpper()
之类的方法,然后将输入的字符串与 YES、NO、Y、N 进行比较(也适用于 String.ToLower()
,但我不确定它会更快。
否则,也许一些 if/else
会给出更清晰的结果,但它不会改变任何速度。
编辑:另一种选择是使用 Console.Read()
而不是 Console.Readline()
所以如果用户想输入 'YES' 它只会保留 'Y' (它只记录一个字符),它允许您将测试除以 2 ;)
做一个 trim 然后一个 tolower,然后验证它是否包含一个有效的选项(n,y 或否,是)然后找出实际的选择是什么,只需使用 .contains 检查y。这将是我的策略。
我正在编写一个代码,用户必须通过按 "y" 或 "n" 或编写 "yes" 或 "no" 来输入他是否想要某个功能, 不检查是否区分大小写(所以如果用户写 yES 或 Yes 它需要工作)。
此外,如果用户写了任何无效的东西,它会说这个选项无效,并再次要求用户select一个选项。
这是它的抽象:
static bool FeatureIsOn { get; set;}
static void Main()
{
bool optionIsValid;
do //Loops around until the option is valid
{
Console.WriteLine();
Console.Write("Enable Feature? [Y/N]: ");
string optionString = Console.ReadLine();
switch(optionString)
{
default:
Console.WriteLine("Invalid option.");
optionIsValid = false;
break;
case "Yes":
case "yes":
case "Y":
case "y":
FeatureIsOn = true;
optionIsValid = true;
break;
case "No":
case "no":
case "N":
case "n":
FeatureIsOn = false;
optionIsValid = true;
break;
}
} while (optionIsValid != true);
}
对每种可能的写法都有一个案例不是很有效"yes"。有更好的方法吗?
在检查之前将要检查的字符串转换为大写或小写:
static bool FeatureIsOn { get; set;}
static void Main()
{
bool optionIsValid;
do //Loops around until the option is valid
{
Console.WriteLine();
Console.Write("Enable Feature? [Y/N]: ");
string optionString = Console.ReadLine();
// convert string to uppercase
optionString = optionString.ToUpper();
switch(optionString)
{
case "YES":
case "Y":
FeatureIsOn = true;
optionIsValid = true;
break;
case "NO":
case "N":
FeatureIsOn = false;
optionIsValid = true;
break;
default:
Console.WriteLine("Invalid option.");
optionIsValid = false;
break;
}
} while (optionIsValid != true);
}
您可以使用 String.ToUpper()
之类的方法,然后将输入的字符串与 YES、NO、Y、N 进行比较(也适用于 String.ToLower()
,但我不确定它会更快。
否则,也许一些 if/else
会给出更清晰的结果,但它不会改变任何速度。
编辑:另一种选择是使用 Console.Read()
而不是 Console.Readline()
所以如果用户想输入 'YES' 它只会保留 'Y' (它只记录一个字符),它允许您将测试除以 2 ;)
做一个 trim 然后一个 tolower,然后验证它是否包含一个有效的选项(n,y 或否,是)然后找出实际的选择是什么,只需使用 .contains 检查y。这将是我的策略。