【问题标题】:How to make string inputs case insensitive in C#?如何在 C# 中使字符串输入不区分大小写?
【发布时间】:2019-04-18 17:23:55
【问题描述】:

因此,在我学习 C# 的过程中,我正在尝试创建一个交互式故事,该故事会根据用户提交的某些输入进行更改。如果在这种情况下用户输入“Bobby”,叙述者就会开始像 Hank Hill 一样说话。但是,根据它的编程方式,输入是区分大小写的。

我已经尝试过我看到的一件事建议,就是将 if 语句格式化为:

if (boyName.ToUpper() == "Bobby")

但这并没有触发不同字母大小写的 if 命令

 Console.WriteLine($"{beginning} \n What was the boy's name?");
 boyName = Console.ReadLine();
  if (boyName == "Bobby")
   {
   Console.WriteLine("That boy ain\'t right, I tell ya what... ");
   Console.ReadKey();
   Console.WriteLine($"{boyName} boy dang climbed a big ol' tree..."); 
   Console.ReadKey();
   }

   else
    {
    Console.WriteLine($"The kid named {boyName} climbed a tree...");
    Console.ReadKey();
    }

我希望有一行代码可以在任何情况下触发 if 条件。但是,我尝试的一切并没有改变这一点。它需要专门为“Bobby”,否则会触发 else 条件

【问题讨论】:

标签: c# string case-sensitive uppercase lowercase


【解决方案1】:

从技术上讲,使用不区分大小写的比较比更改要比较的字符串的大小写更好,因为ToUpper() 对于所有语言(字母表)并不总是按预期工作(从比较的角度来看)。有关详细信息,请参阅 this article on case folding 中的“土耳其语 'i'”部分。

要在不修改原始字符串的情况下解决您的问题,您可以使用 String.Equals 方法,该方法接受要比较的字符串的参数以及指定要使用的比较类型的参数。

因此您的代码可能如下所示:

if (string.Equals(boyName, "Bobby", StringComparison.OrdinalIgnoreCase))

或者你可以使用实例方法版本,它更短一点:

if (boyName.Equals("Bobby", StringComparison.OrdinalIgnoreCase))

【讨论】:

    【解决方案2】:

    你应该试试

    if (boyName.ToUpper() == "Bobby".ToUpper())
    

    【讨论】:

    • 谢谢。这解决了我的问题。我很少喜欢在不知道它为什么起作用的情况下做事,那为什么会起作用呢?
    • ToUpper 将所有字符设置为大写,所以我们比较你的var(boyName) 和你的字符串(Bobby) 都用大写...结果是"BOBBY" == "BOBBY"
    • 还有。 。降低();是另一种可以使用的方法。查看可用于各种任务的字符串方法。 docs.microsoft.com/en-us/dotnet/api/…
    猜你喜欢
    • 2010-09-05
    • 1970-01-01
    • 2011-08-18
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    相关资源
    最近更新 更多