Как сравнить символы в C# - PullRequest
2 голосов
/ 06 апреля 2020

Я пытаюсь сравнить два символа в 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, похоже, не упоминается сравнение символов. У кого-нибудь есть лучший метод для сравнения символов в строке?

Ответы [ 3 ]

5 голосов
/ 06 апреля 2020

" " - это string длины один; char и string никогда не совпадают; Вы хотите ' ', пробел символ :

if (indexChar != ' ')

Однако, если вы просто пытаетесь удалить все пробелы, это, вероятно, проще сделать:

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

Это позволяет избежать выделения большого количества промежуточных строк.

Обратите внимание, что символ пробела не является единственным символом пробела в Юникоде. Если вам нужно разобраться со всеми пробельными символами, лучше использовать регулярное выражение:

var outputName = Regex.Replace(inputName, @"\s", "");
0 голосов
/ 07 апреля 2020

Спасибо за все замечательные предложения. inputName.CompareTo ("") не является способом к go для этого примера, вам все равно придется иметь al oop. В итоге я использовал:

var outputName = Regex.Replace(inputName, @"\s", "")
, который работает, и это только одна строка кода!

0 голосов
/ 06 апреля 2020

Вы можете использовать .CompareTo (char) для сравнения символов. Пример:

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