【问题标题】:Split string on "\\" and/or "/" using LINQ?使用 LINQ 在“\\”和/或“/”上拆分字符串?
【发布时间】:2012-03-16 10:11:59
【问题描述】:

如何使用 LINQ 在“\”和/或“/”上拆分以下字符串

我说和/或表示“\”和“/”是因为在我的文件路径中,我最终可能只得到正斜杠、仅反斜杠或两者的混合。

 "temp\\SimpleRec/bin/Debug/Geming.SimpleRec.vshost.exe"

 "temp\\SimpleRec\\bin\\Debug\\Geming.SimpleRec.vshost.exe"

 "temp/SimpleRec/bin/Debug/Geming.SimpleRec.vshost.exe"

谢谢

【问题讨论】:

  • 为什么使用 LINQ 而不是 string.Split
  • 我的解决方案没有使用Split()

标签: c# linq split


【解决方案1】:

String.Split() 似乎是这里的最佳选择,但只是为了好玩,也可以使用 LINQ。

One of my implementationsString Calculator Kata 使用这种方法(根本没有Split)。请参阅InternalAdd() 方法。我采用头部和尾部的功能方法。您使用.Take() 将字符串分为头部和尾部,并返回头部+为尾部调用相同函数的递归结果。

一个字符定界符的示例代码如下(当定界符变长时事情变得复杂了):

    private IEnumerable<string> BreakString(string source)
    {
        var delimiter = '/';
        var head = source.TakeWhile(c => c != delimiter);
        if (!head.Any())
        {
            yield break;
        }
        var tail = source.SkipWhile(c => c != delimiter)
            .Skip(1);
        yield return String.Join("", head);
        foreach (var t in BreakString(String.Join("", tail)))
        {
            yield return t;
        }

    }


// usage
from s in BreakString(source)

你还可以更进一步,通过tail.Aggregate(new StringBuilder(), (sb, c) =&gt; sb.Append(c)).ToString();摆脱String.Join()

【讨论】:

  • 这似乎是一个非常多的工作,只是为了拆分一个字符串。 :)
  • 同意 100%,但它是日常 Kata 的一个很好的练习 :) String.Split 的内部实现也可能很复杂。
  • 好吧,脑力锻炼没什么问题...不过如果String.Split 的内部实现过于复杂我会担心:)
  • @theJoric,是的......但大部分看起来像边缘情况:)
【解决方案2】:

您不需要 LINQ:

string[] values = myString.Split(new []{'\\', '/'});

为此类任务引入 LINQ 只会增加复杂性并降低可读性。

【讨论】:

    【解决方案3】:

    有时,我认为 LINQ 试图用于所有事情,但实际上并非如此。

    string[] data = myString.Split(new Char[]{'\\', '/'});
    

    【讨论】:

      【解决方案4】:

      这里不需要使用 LinQ,默认的 Split() 方法就可以了:

      var path = "temp\\SimpleRec/bin/Debug/Geming.SimpleRec.vshost.exe"
      var parts = path.Split(new[] { '/', '\\' });
      

      希望这会有所帮助!

      【讨论】:

        【解决方案5】:

        您可以通过以下方式使用 LINQ 进行拆分:

        var list=from item in str.Split(new string[] { "\\","/" }, StringSplitOptions.None)
                 select item;
        

        【讨论】:

        • LINQ 在这里毫无意义。结果将与str.Split(new [] { "\\","/" }, StringSplitOptions.None) 相同
        • @the_joric:Wajih 只是对在这种情况下实现 LINQ 感到好奇.....所以,用 LINQ 提供解决方案......
        【解决方案6】:

        不需要 LINQ,只需这样做:

        var path = @"temp\\SimpleRec/bin/Debug/Geming.SimpleRec.vshost.exe";
        var split = path.Split(new [] { '/', '\\' }, StringSplitOptions.RemoveEmptyEntries);
        

        【讨论】:

          猜你喜欢
          • 2012-01-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-06
          • 1970-01-01
          • 1970-01-01
          • 2019-12-08
          相关资源
          最近更新 更多