【问题标题】:C# Split string in elegant way [closed]C#以优雅的方式拆分字符串[关闭]
【发布时间】:2012-03-25 02:51:40
【问题描述】:

我可以有两种情况的字符串行。

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

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

当然,我可以使用“/”分割并进行一些检查,但我正在寻找一些优雅的解决方案。

如果我做 mystring.Split('/') 它可以在数组中的第二或第三位置,我怎么知道它在哪里?

我如何获得“ccc”?

谢谢!

【问题讨论】:

  • 请详细说明您为什么不只是使用 mystring.Split('/');
  • string.split() 有什么问题?
  • 如果我做 mystring.Split('/') 它可以在数组中的第二或第三位置,我怎么知道它在哪里?
  • 为什么需要拆分,需要检查什么?
  • 为什么String.Split(new Char [] {'/'})不够“优雅”?

标签: c# split


【解决方案1】:

您的问题不是很清楚,但我会在黑暗中试一试,并假设您要忽略输入字符串开头和结尾处的斜线导致的空条目。

这种情况你可以试试:

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

【讨论】:

  • 根据我对 OP 问题的解释,这似乎是最干净的解决方案。
【解决方案2】:
myString.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries).ElementAt(2);

【讨论】:

  • 既然可以使用myString.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries)[2];,为什么还要使用“.ElementAt”?
  • 那天我显然玩了太多返回 IEnumerable 的东西。
【解决方案3】:

你可以这样做:

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 将是相同的。

【讨论】:

  • 使用此解决方案和"aaa//bbb" 之类的字符串,"bbb" 部分将与"aaa/bbb" 不在同一位置;有了乔的解决方案,就可以了。
  • 是的,我实际上赞成乔的解决方案。不知道StringSplitOptions
【解决方案4】:

有什么比String.Split 方法更优雅的呢?它采用分隔符并吐出一个拆分字符串的数组。

【讨论】:

  • 如果我做 mystring.Split('/') 它可以在数组中的第二或第三位置,我怎么知道它在哪里?
【解决方案5】:

优雅与否,您仍然可以使用Split 并检查似乎是问题的条件:它是否以斜线开头?

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

【讨论】:

    【解决方案6】:

    您可以检查结果的长度,只返回相关的结果。

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

    这将为两个字符串生成相同的结果。

    那么如果你需要计算出Array中的位置,你可以简单地执行以下操作。

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

    最后要确认你得到了正确的位置/索引,你可以这样做:

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

    【讨论】:

      猜你喜欢
      • 2018-04-01
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      • 2011-05-02
      • 2022-01-19
      • 1970-01-01
      • 2020-01-01
      • 2016-05-21
      相关资源
      最近更新 更多