如何从一个多行文本框中将字符串按照'\n\r'作为行结束符拆分成List<string>?

27

我在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>


你确定是 \n\r 而不是反过来吗? - Fredrik Mörk
1
它可能是相反的,但我认为 Environment.NewLine 应该有正确的顺序,因此它可以将行在这两个字符上拆分为单元分隔符。 - Edward Tanguay
4个回答

43

类似这样的东西可能行得通:

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"替换为适合您需求的分隔符字符串。


19

试试这个:

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

8
使用重载的 string.Split 方法,并将分隔符作为 string[] 参数传递:
itemTypeDefinitionScript.Split(new [] { Environment.NewLine }, 
                               StringSplitOptions.RemoveEmptyEntries);

6

小补充:


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

这将捕获没有 "\r" 的情况(我有许多古老的FORTRAN FIFO代码的例子...),并且不会丢弃任何行。


\r\n\n 是否涵盖所有情况?我的意思是,由于现在的 C# 是跨平台的,我想知道是否有其他操作系统使用不同的分隔符来表示新行。 - Damn Vegetables

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接