Как разбить строку на List <string>из многострочного TextBox, который добавляет '\ n \ r' в конце строки? - PullRequest
20 голосов
/ 12 ноября 2009

В моем файле XAML есть текстовое поле:

<TextBox 
             VerticalScrollBarVisibility="Visible" 
             AcceptsReturn="True" 
             Width="400" 
             Height="100" 
             Margin="0 0 0 10" 
             Text="{Binding ItemTypeDefinitionScript}"
             HorizontalAlignment="Left"/>

, с помощью которого я получаю строку, отправляемую на CreateTable(string), которая в свою очередь вызывает CreateTable(List<string>).

public override void CreateTable(string itemTypeDefinitionScript)
{
    CreateTable(itemTypeDefinitionScript.Split(Environment.NewLine.ToCharArray()).ToList<string>());
}

public override void CreateTable(List<string> itemTypeDefinitionArray)
{
    Console.WriteLine("test: " + String.Join("|", itemTypeDefinitionArray.ToArray()));
}

Проблема в том, что строка, очевидно, имеет '\ n \ r' в конце каждой строки, поэтому Split ('\ n') получает только один из них, как и Split ('\ r'), и использует Environment. Newline.ToCharArray (), когда я набираю это:

one
two
three

производит это:

one||two||three

но я хочу, чтобы это произвело:

one|two|three

Что такое однострочный для простого разбора строки с окончанием '\n\r' в List<string>?

Ответы [ 4 ]

37 голосов
/ 12 ноября 2009

Примерно так может работать:

string input = "line 1\r\nline 2\r\n";
List<string> list = new List<string>(
                           input.Split(new string[] { "\r\n" }, 
                           StringSplitOptions.RemoveEmptyEntries));

Замените "\r\n" на разделительную строку, соответствующую вашим потребностям.

12 голосов
/ 12 ноября 2009

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

List<string> list = new List<string>(Regex.Split(input, Environment.NewLine));
7 голосов
/ 12 ноября 2009

Используйте перегрузку string.Split, которая принимает string[] в качестве разделителей:

itemTypeDefinitionScript.Split(new [] { Environment.NewLine }, 
                               StringSplitOptions.RemoveEmptyEntries);
4 голосов
/ 22 мая 2012

Незначительное добавление:

List<string> list = new List<string>(
                           input.Split(new string[] { "\r\n", "\n" }, 
                           StringSplitOptions.None));

будет ловить случаи без "\ r" (у меня много таких примеров из древних кодов FORTRAN FIFO ...) и не выбрасывать ни одной строки.

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