Как разбить строку в строках - PullRequest
5 голосов
/ 07 апреля 2011

Я запутался с тем, как правильно разбивать строки.

Я где-то читал, что окна используют \ r \ n для разбиения строк, но эти два кода выдают один и тот же

regex.split(sometext, "\r\n");
regex.split(sometext, "\n");

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

Ответы [ 6 ]

12 голосов
/ 07 апреля 2011

Используйте

var myArray = sometext.Split(Environment.NewLine);

Environment.NewLine выберет правильный вариант для вашей операционной системы. Это не удастся, если данные были созданы в другой системе. То, что может работать на всех системах, но иметь непредвиденные последствия, -

var myArray = sometext.Split(new[] {'\r', '\n'}, 
    StringSplitOptions.RemoveEmptyEntries);

Некоторые возможные неприятные вещи - это то, что он удалит все пустые строки и разбит на возврат каретки.

3 голосов
/ 07 апреля 2011

Если вы хотите поддерживать символы новой строки для каждой платформы (например, вам нужно проанализировать входные файлы, созданные в Linux / Windows / Mac на вашем веб-сайте ASP.NET), и вы не переносите пустые строки, я предлагаем использовать этот метод вместо:

myString.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries)

Это вернет

["one","two","three"]

для входной строки

"one\r\ntwo\n\n\nthree"

Обновление: Если вам нужно переносить пустые строки, вы можете использовать

myString.Replace("\r\n", "\n").Split("\n")

Это должно работать как для файлов EOL "\ r \ n", так и для "\ n".

2 голосов
/ 07 апреля 2011

\ r - это возврат каретки \ n - новая строка .

Windows использует \ r \ n по умолчанию (Environment.NewLine) .

[Переписано для уточнения части Environment.NewLine]

Чтобы получить правильные символы для разделения текста, вы можете использовать Environment.NewLine , которыйсообщит правильные символы в зависимости от вашей платформы.

2 голосов
/ 07 апреля 2011

Вы можете использовать Environment.NewLine, чтобы убедиться, что вы получите правильный.

0 голосов
/ 07 апреля 2011
regex.split(sometext, "\r\n");

будет способ сделать это.

Причина, по-видимому, оба дают один и тот же результат, потому что "\ n" разрывает строку после "\ r".Таким образом, у вас есть подстроки с завершающим символом "\ r", которые не будут очевидны, если вы не посмотрите внимательно на них с помощью шестнадцатеричного редактора или чего-то еще.

При этом я рекомендовал бы использовать Environment.NewLine вместо"\ г \ п"

0 голосов
/ 07 апреля 2011

По причинам, указанным в других ответах, делайте только то, что говорит EDIT.Оба в порядке, однако лично я бы использовал:

regex.split(sometext, "\n");

РЕДАКТИРОВАТЬ:

ИСПОЛЬЗОВАТЬ Environment.Newline, как предложено в других ответах.

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