Как разбить строку в 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\r
'в List<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...) и не выбрасывайте ни одной строки.