【问题标题】:How to split a string two times with different separators using LINQ?如何使用 LINQ 使用不同的分隔符将字符串拆分两次?
【发布时间】:2013-02-10 21:16:09
【问题描述】:

我有像"1\t2\r\n3\t4" 这样的字符串,我想将它们拆分为:

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 解决此问题?

【问题讨论】:

    标签: c# linq split


    【解决方案1】:

    删除“@”:

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

    @ 使字符串包含反斜杠,而不是它们所代表的字符。

    【讨论】:

    • 老实说,我不知道为什么我在那里添加了 @ 并且无法看到它。非常感谢! :D
    • 是的,我也有同样的问题,我不敢把它放在评论中,因为我知道这不是地方。但我想知道这是否是临时的,因为它非常有用!
    • @hattenn 我想你可以在Meta Stack Overflow 上寻找/讨论这类东西。我现在只是扫了一眼“问题”标签。
    【解决方案2】:
    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

    【讨论】:

    • 将原始字符串中的\r\n 也替换为Environment.Newline 会更好吗?如果我们知道字符串有\r\n,那么如果代码在不同的平台上运行,Environment.Newline 将不起作用。我怀疑这是一个问题。
    • 如果代码在不同的平台上运行,输入文本也可能包含正确的行分隔符。
    • 是的。我想在代码中包含一个字符串文字然后拆分它是没有意义的,所以字符串必须来自其他地方。我认为在一个 sn-p 中同时看到平台相关版本和平台无关版本只会让我的书呆子发痒。
    猜你喜欢
    • 1970-01-01
    • 2016-04-06
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 2022-01-01
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多