[英]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.