Получение дополнительной записи в массиве для каждой новой строки - PullRequest
0 голосов
/ 26 апреля 2019

Для следующего кода ...

IEnumerable<string> items=searchterms.Trim().Split(Environment.NewLine.ToCharArray());
foreach (var item in items) {

Я получаю элемент длиной 0 между каждым элементом searchterm.Я использовал подобный код в другом месте и не сталкивался с этим, поэтому не уверен, почему это происходит сейчас.Что мне нужно добавить сюда, чтобы избавиться от этих лишних записей?то есть, чтобы количество элементов соответствовало количеству слагаемых во входных данных.У меня есть обходной путь (пропустить элементы с длиной 0), но досадно, что цифры не совпадают, и я хотел бы исправить это для отображения целей прогресса.то есть item i + 1 items.count.

PS это в формах Xamarin на UWP.

спасибо, Дональд.

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Проблема в том, что вы разделяете на массив символов { '\r', '\n' }, что означает, что любой символ рассматривается как разделитель, а не как целая последовательность "\r\n", т. Е. В "\r\n" между ними есть пустая строка.

Чтобы разбить на всю последовательность, используйте только строковый массив из одного элемента

IEnumerable<string> items = searchterms.Trim().Split(new string[] { Environment.NewLine, }, StringSplitOptions.None);

. Это не приведет к созданию пустого элемента, если в строке нет последовательных "\r\n".Если вы также хотите удалить пустые элементы, в таком случае вы можете использовать опцию RemoveEmptyEntries разбиение строки.

IEnumerable<string> items = searchterms.Trim().Split(new string[] { Environment.NewLine, }, StringSplitOptions.RemoveEmptyEntries);
0 голосов
/ 26 апреля 2019

Поскольку новая строка состоит из 2 символов (в любом случае, в большинстве систем \ r и \ n), вы можете получить дополнительную пустую строку в виде строки между этими символами.

Попробуйте это:

IEnumerable<string> items=searchterms.Trim().Split(new string[] {Environment.NewLine}, StringSplitOptions.None);
foreach (var item in items) {
...