2012-03-07 69 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];