2012-03-07 28 views
-9

我可以有兩個字符串行的情況。C#以優雅的方式拆分字符串

string mystring = "/aaa/bbb/ccc/ddd/eee" 

string mystring2 = "aaa/bbb/ccc/ddd/eeee/"; 

我當然可以通過「/」使用拆分,並做一些檢查,但我找了一些優雅的解決方案。

如果我做mystring.Split('/')它可以在數組的第二或第三位置,我怎麼知道它在哪裏?

如何獲得'ccc'?

謝謝!

+5

定義優雅的解決方案 – MilkyWayJoe 2012-03-07 15:02:01

+1

什麼是錯的'string.split()'? – 2012-03-07 15:02:51

+1

爲什麼你需要拆分,你需要檢查什麼? – Kaf 2012-03-07 15:04:06

回答

4

你可以這樣做:

string mystring = "/aaa/bbb/ccc/ddd/eee"; 
string mystring2 = "aaa/bbb/ccc/ddd/eeee/"; 

string[] result = mystring.Trim({'/'}).Split('/'); 
string[] result2 = mystring2.Trim({'/'}).Split('/'); 

然後,resultresult2將是相同的。

+0

有了這個解決方案和一個類似於「aaa // bbb」的字符串,「bbb」部分不會與「aaa/bbb」相同。與喬的解決方案,它會。 – phoog 2012-03-07 16:12:52

+0

是的,我居然提出了喬的解決方案。沒有意識到'StringSplitOptions'。 – derekaug 2012-03-07 16:18:57

0

什麼比String.Split方法更優雅?它接受分隔符並吐出一個拆分字符串的數組。

+0

如果我做mystring.Split('/')它可以在數組的第二或第三位置,我怎麼知道它在哪裏? – 2012-03-07 15:04:09

7

你的問題不是很清楚,但是我會在黑暗中進行刺探,並假設你想忽略輸入字符串開始和結尾的斜線所產生的空條目。

在這種情況下,你可以嘗試:

String.Split(new string[] {"/"}, StringSplitOptions.RemoveEmptyEntries) 
+0

通過對OP問題的解釋,這似乎是最乾淨的解決方案。 – Christoffer 2012-03-07 15:09:02

5
myString.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries).ElementAt(2); 
+0

爲什麼在使用'myString.Split(new [] {'/'},StringSplitOptions.RemoveEmptyEntries)[2];''時使用「.ElementAt」 – phoog 2012-03-07 16:13:45

+0

那天我顯然已經玩了太多返回IEnumerable的東西。 – Scroog1 2012-03-13 16:10:51

0

優雅與否,你仍然可以使用Split和檢查,這似乎是這個問題的條件:它以斜線開頭或不?

string[] split = mystring.Split("/"); 
if (mystring.StartsWith("/")) 
    // index = 3; 
else 
    // index = 2; 
0

您可以檢查結果的長度,只返回相關的結果。

var split = mystring.Split('/').Where(p => p.Length > 0).ToArray(); 
var split2 = mystring2.Split('/').Where(p => p.Length > 0).ToArray(); 

這會爲這兩個字符串生成相同的結果。

然後,如果您需要確定陣列中的位置,則可以簡單地執行以下操作。

int position = Array.IndexOf(split, "ccc"); // Returns 2 
int position2 = Array.IndexOf(split2, "ccc"); // Returns 2 

最後確認你有,你可以做這樣的事情正確的位置/索引:

string string1 = split[position]; 
string string2 = split2[position2];