簡體   English   中英

使用LINQ在“ \\\\”和/或“ /”上拆分字符串?

[英]Split string on “\\” and/or “/” using LINQ?

如何使用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[] values = myString.Split(new []{'\\', '/'});

為此類任務引入LINQ只會增加復雜性並降低可讀性。

有時,我認為LINQ被嘗試用於所有事物,而事實並非如此。

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

此處無需使用LinQ,默認的Split()方法即可完成工作:

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

希望這可以幫助!

String.Split()似乎是這里的最佳選擇,但只是出於娛樂目的,也可以使用LINQ。

String Calculator Kata的 實現之一使用這種方法(完全沒有Split )。 請參見InternalAdd()方法。 我對頭和尾采取功能性方法。 您可以使用.Take()將字符串分為頭和尾,然后返回為tail調用相同函數的head +遞歸結果。

下面是一個字符定界符的示例代碼(定界符變得更長時,事情變得復雜):

    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)

您還可以更進一步,擺脫String.Join()tail.Aggregate(new StringBuilder(), (sb, c) => sb.Append(c)).ToString();

您可以通過以下方式使用LINQ進行拆分:

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

無需LINQ,只需執行以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM