Что не так с моим использованием String.EndsWith? - PullRequest
1 голос
/ 07 марта 2019

Я не могу понять, почему EndsWith возвращает false.

У меня есть код C #:

string heading = "yakobusho";
bool test = (heading == "yakobusho");
bool back = heading.EndsWith("​sho");
bool front = heading.StartsWith("yak");
bool other = "yakobusho".EndsWith("sho");
Debug.WriteLine("heading = " + heading);
Debug.WriteLine("test = " + test.ToString());
Debug.WriteLine("back = " + back.ToString());
Debug.WriteLine("front = " + front.ToString());
Debug.WriteLine("other = " + other.ToString());

Вывод:

heading = yakobusho
test = True
back = False
front = True
other = True

Что происходит с EndsWith?

Ответы [ 3 ]

4 голосов
/ 07 марта 2019

Содержит невидимый символ перед строкой "sho":

bool back = heading.EndsWith("​sho");

Исправленная строка:

bool back = heading.EndsWith("sho");
1 голос
/ 07 марта 2019

Строка "​sho" в третьей строке начинается с пробела нулевой длины . "​sho".Length возвращает 4, в то время как ((int)"​sho"[0]) возвращает 8203, значение Юникода для пробела нулевой длины.

Вы можете ввести его в строку, используя его шестнадцатеричный код, например:

"\x200Bsho"

Досадно, что этот символ не считается пробелом, поэтому его нельзя удалить с помощью String.Trim().

0 голосов
/ 07 марта 2019

В вашем аргументе EndsWith есть специальный символ.

Как видно из этого кода:

  class Program
  {
    static void Main(string[] args)
    {
      string heading = "yakobusho";

      string yourText = "​sho";
      bool back = heading.EndsWith(yourText);

      Debug.WriteLine("back = " + back.ToString());
      Debug.WriteLine("yourText length = " + yourText.Length);

      string newText = "sho";
      bool backNew = heading.EndsWith(newText);

      Debug.WriteLine("backNew = " + backNew.ToString());
      Debug.WriteLine("newText length = " + newText.Length);

    }
  }

ВЫХОД:

back = False
yourText length = 4
backNew = True
newText length = 3

длина yourText равна 4, поэтому в этой строке есть какой-то скрытый символ.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...