如何从多行TextBox中将字符串拆分为List <string>,将'\n\r'添加为行结尾?

Edw*_*uay 20 c# arrays string

我的XAML文件中有一个文本框:

<TextBox 
             VerticalScrollBarVisibility="Visible" 
             AcceptsReturn="True" 
             Width="400" 
             Height="100" 
             Margin="0 0 0 10" 
             Text="{Binding ItemTypeDefinitionScript}"
             HorizontalAlignment="Left"/>
Run Code Online (Sandbox Code Playgroud)

我得到一个字符串,我发送给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()));
}
Run Code Online (Sandbox Code Playgroud)

问题是字符串显然在每一行的末尾都有'\n\r',所以Split('\n')只得到其中一个,就像Split('\ r')一样,并使用Environment.Newline.ToCharArray ()当我输入这个:

one
two
three
Run Code Online (Sandbox Code Playgroud)

产生这个:

one||two||three
Run Code Online (Sandbox Code Playgroud)

但我当然想要它产生这个:

one|two|three
Run Code Online (Sandbox Code Playgroud)

什么是单行简单地将带有' \n\r'结尾的字符串解析为List<string>

Fre*_*örk 39

像这样的东西可以工作:

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

替换"\r\n"为适合您需要的分离器串.


Rub*_*ias 12

试试这个:

List<string> list = new List<string>(Regex.Split(input, Environment.NewLine));
Run Code Online (Sandbox Code Playgroud)

  • +1是唯一保留空行的解决方案. (3认同)

bru*_*nde 7

使用string.Split带有string[]分隔符的重载:

itemTypeDefinitionScript.Split(new [] { Environment.NewLine }, 
                               StringSplitOptions.RemoveEmptyEntries);
Run Code Online (Sandbox Code Playgroud)


SAL*_*SAL 5

次要添加:

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

将捕获没有“ \ r”的情况(我有很多这样的例子来自古老的FORTRAN FIFO代码...),并且不会丢掉任何行。