2013-02-10 45 views
5

我有这样"1\t2\r\n3\t4"串,我想将它们分割为:如何用不同的分隔符使用LINQ分割两次字符串?

new string[][] { { 1, 2 }, { 3, 4 } }

基本上,它应该分成行,每行应分成标签。我尝试使用以下,但它不工作:

string toParse = "1\t2\r\n3\t4"; 

string[][] parsed = toParse 
    .Split(new string[] {@"\r\n"}, StringSplitOptions.None) 
    .Select(s => s.Split('\t')) 
    .ToArray(); 
  1. 什么是错我的方法?为什么我不能得到理想的结果?
  2. 你会如何使用LINQ来解决这个问题?

回答

7

删除 '@':不是他们所代表的性格

string toParse = "1\t2\r\n3\t4"; 

string[][] parsed = toParse 
    .Split(new string[] {"\r\n"}, StringSplitOptions.None) 
    .Select(s => s.Split('\t')) 
    .ToArray(); 

的@使得字符串包括反斜杠。

+0

老实说,我不知道什么愚蠢的缘故,我补充说,'@'那里,一直没能看到它。非常感谢! :D – hattenn 2013-02-10 21:26:17

+0

@hattenn,我不是故意要bit牙咧! – bas 2013-02-10 22:25:53

+0

是的,我有同样的问题,我不敢把它放在评论中,因为我知道这不是地方。但是我想知道这是否是一件临时的事情,因为它非常有用! – bas 2013-02-10 22:30:50

3
string str = "1\t2\r\n3\t4"; 
Int32[][] result = str.Split(new[] { Environment.NewLine }, StringSplitOptions.None) 
    .Select(s => s.Split('\t').Select(s2 => int.Parse(s2)).ToArray()) 
    .ToArray(); 

Demo

+0

用'Environment.Newline'替换原始字符串中的'\ r \ n'会更好吗?如果我们知道字符串具有'\ r \ n',那么如果代码在不同的平台上运行,'Environment.Newline'将不起作用。虽然我怀疑这是一个问题。 – TheEvilPenguin 2013-02-10 21:29:30

+1

如果代码在不同平台上运行,则输入文本可能包含正确的行分隔符。 – 2013-02-10 21:31:38

+0

是的。我想在代码中包含一个字符串文字并将其分开是没有意义的,所以这个字符串必须来自其他地方。我认为这只是痒痒我的儿子在一个片段中看到平台依赖和平台独立版本。 – TheEvilPenguin 2013-02-10 21:35:41