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

У меня есть текстовое поле в моем файле 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()));
}

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

one
two
three

производит следующее:

one||two||three

но я хочу, чтобы это получилось:

one|two|three

Что такое однострочный синтаксис для простого анализа строки с концами < \n\rList<string>?

Ответы

Ответ 1

Что-то вроде этого может работать:

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" на строку разделителя, подходящую для ваших нужд.

Ответ 2

попробуйте следующее:

List<string> list = new List<string>(Regex.Split(input, Environment.NewLine));

Ответ 3

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

itemTypeDefinitionScript.Split(new [] { Environment.NewLine }, 
                               StringSplitOptions.RemoveEmptyEntries);

Ответ 4

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

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

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