2009-11-12 42 views
13

我有一个文本框,在我的XAML文件:如何将多行文本框中的字符串拆分为列表<string>,该多行文本框添加' n r'作为行尾?

<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”在每行,以便斯普利特结束(“\ n”)只得到其中一人确实斯普利特(“\ r”),和使用Environment.Newline.ToCharArray()当我在这种类型的:

one 
two 
three 

产生这样的:

one||two||three 

但我想当然它来产生这样的:

one|two|three 

什么是简单解析字符串'\n\r'结尾为List<string>

+0

你确定它是'\ n \ r'而不是其他方式吗? – 2009-11-12 16:00:23

+1

它可能是另一种方式,但我会认为Environment.NewLine会以正确的顺序排列,因此它可以将这两个字符的分隔线作为单元分隔符 – 2009-11-12 16:02:17

回答

29

像这样的东西可以工作:

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"有适合您的需要分隔字符串。

+0

出色,就是这样,谢谢! – 2009-11-12 16:05:19

6

使用的string.Split接受一个string[]作为分隔符重载:

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

试试这个:

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

+1是唯一保留空白行的解决方案。 – 2009-11-12 16:07:54

3

次要另外:

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

将赶上而不为 “\ r” 的情况下(我从古代FORTRAN FIFO代码很多这样的例子......)并且不要扔掉任何线条。

相关问题