Неверный результат при разделении строки, когда заданные символы не найдены - PullRequest
0 голосов
/ 09 октября 2018

Когда я пытался разделить строковое значение some text here на ++.Я ожидал, что результатом будет пустой список.Поскольку ++ не найден в строке some text here, результат Count для List должен быть 0.

Однако полученный результат равен 1 (когда я Count на List).

Как я могу определить, что в строке нет ++?(граф не работал)

List<string> l = value.Split("++").ToList();

Ответы [ 4 ]

0 голосов
/ 09 октября 2018

Если в строке нет "++", вы получите исходную строку.Если в строке n "++", вы получите n + 1 сплитов.С вашим кодом все в порядке, за исключением того, что ему нужен переданный массив:

var l = value.Split(new string[] {"++"}, StringSplitOptions.None).ToList();

Так что когда l.Count() == 1, то в строке

нет "++"
0 голосов
/ 09 октября 2018

Как отметили @Gilad и другие, это действительно ожидаемый результат.Если строка не содержит значения разделения, вся строка возвращается в качестве первого элемента в списке.

Если вы планируете использовать это значение разделения позже, вы все равно можете использовать .Split() метод определения, содержится ли ваша разделенная строка в строке, просто проверяя, равно ли число 1:

List<string> l = value.Split(new[] {"++"}).ToList();

if (l.Count == 1) {
    //++ was not found in the string
} else {
    //++ was found in the string (l.Count-1) times
}

Примечание предостережения: менее эффективно дляразбить строку и выделить массив, чем просто проверить с помощью метода, такого как .Contains().Используйте вышеприведенное решение, если вы можете использовать перечисленные выше элементы позже в коде.

0 голосов
/ 09 октября 2018

По умолчанию, если совпадений не найдено, возвращается строка в массиве размером один.

Как я могу определить, не содержит ли строка ++ в ней?

if (value.Contains("++"))

edit: вау кучу ответов уже, когда я писал это.: D

0 голосов
/ 09 октября 2018

Наблюдаемое поведение является расчетным.Если разделитель не найден, возвращается коллекция с одним элементом.Как гласит документация :

Если этот экземпляр не содержит каких-либо символов в разделителе, возвращаемый массив состоит из одного элемента, который содержит этот экземпляр.

Если вы хотите проверить, существует ли разделитель, вы можете использовать .Contains("++") или .IndexOf("++") != -1

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