【问题标题】:How to compare characters in C#C#中如何比较字符
【发布时间】:2026-01-03 15:15:01
【问题描述】:

我正在尝试比较 C# 中的两个字符。 "==" 运算符不适用于字符串,您必须使用 .Equals() 方法。在下面的代码示例中,我想读取输入字符串中的每个字符,并输出另一个不带空格的字符串。

    string inputName, outputName = null;
    // read input name from file
    foreach (char indexChar in inputName)
    {
       if (!indexChar.Equals(" "))
          outputName += indexChar;
    }

这不起作用,比较总是等于 false,即使输入名称有嵌入空格。我也尝试过使用 Equals(string, string) 的重载方法,它也不起作用。我假设 C# 将 char 变量视为长度为 1 的字符串。Microsoft 的文档似乎没有提到比较字符。有没有人有更好的方法来比较字符串中的字符?

【问题讨论】:

  • 是什么让您认为== 运算符不起作用?它适用于' '
  • 为什么不直接使用替换方法作为var outputName = inputName.Replace(" ", string.Empty);

标签: c# char compare


【解决方案1】:

" " 是长度为 1 的 stringcharstring 不匹配;你想要' ',空格字符

if (indexChar != ' ')

但是,如果您只是想删除所有空格,那么这样做可能更容易:

var outputName = inputName.Replace(" ", "");

这样可以避免分配大量中间字符串。

还要注意,空格字符不是 unicode 中唯一的空格字符。如果您需要处理所有空白字符,正则表达式可能是更好的选择:

var outputName = Regex.Replace(inputName, @"\s", "");

【讨论】:

    【解决方案2】:

    您可以使用 .CompareTo(char) 来比较字符。 示例:

    if('Z'.CompareTo('Z') == 0)
       Console.WriteLine("Same character !");
    

    【讨论】:

    • 嗯,你已经在回答中提到了哈哈,这只是比较字符的另一种方式。
    【解决方案3】:

    感谢所有伟大的建议。 inputName.CompareTo(" ") 不是这个例子的方法,你仍然必须有一个循环。我最终使用了:

    var outputName = Regex.Replace(inputName, @"\s", "")
    行得通,而且只有一行代码!

    【讨论】: