【问题标题】:how to do substring in reverse mode in c#如何在c#中以反向模式执行子字符串
【发布时间】:2016-08-06 21:20:17
【问题描述】:

我的字符串是“csm15+abc-indiaurban@v2”。我只想要我的字符串中的“indiaurban”。我现在正在做的是:

var lastindexofplusminus = input.LastIndexOfAny(new char[]{'+','-'});

var lastindexofattherate = input.LastIndexOf('@');

string sub = input.Substring(lastindexofplusminus,lastindexofattherate);

但出现错误“索引和长度必须引用字符串中的位置。”

提前致谢。

【问题讨论】:

  • "Index and length" - 你传递了两个索引。
  • 那么如何只实现“indiaurban”。你能给我正确的子字符串吗?
  • 你明白我的评论了吗?如果是这样,您应该能够自己解决。

标签: c# string substring reverse


【解决方案1】:

您应该将length 放在要获取的Substring 的第二个参数中(而不是传递另一个索引)。鉴于您知道这两个索引,因此长度的转换非常简单:

string sub = input.Substring(lastindexofplusminus + 1, lastindexofattherate - lastindexofplusminus - 1);

注意,需要+1 来获取字符之后 你的lastindexofplusminus
-1 需要在它们之间获取Substring 减号 lastindexofattherate 本身。

【讨论】:

    【解决方案2】:

    假设您的字符串始终采用该格式

    string str = "csm15+abc-indiaurban@v2";
    string subSTr = str.Substring(10).Substring(0,10);
    

    【讨论】:

      【解决方案3】:

      您可以使用 LINQ:

      string input = "csm15+abc-indiaurban@v2";
      
      string result = String.Join("", input.Reverse()
                                           .SkipWhile(c => c != '@')
                                           .Skip(1)
                                           .TakeWhile(c => c != '+' && c != '-')
                                           .Reverse());
      
      Console.WriteLine(result); // indiaurban
      

      【讨论】:

      • 我喜欢Reverse()的想法。
      【解决方案4】:

      我不知道你的断点是什么,但这里是工作的示例

      您可以通过String.Substring Method (Int32, Int32)了解更多信息

      String s = "csm15+abc-indiaurban@v2";
              Char charRange = '-';
              Char charEnd = '@';
              int startIndex = s.IndexOf(charRange);
              int endIndex = s.LastIndexOf(charEnd);
              int length = endIndex - startIndex - 1;
              Label1.Text = s.Substring(startIndex+1, length);
      

      【讨论】:

        【解决方案5】:

        您可以简单地反转字符串,根据位置和长度应用子字符串,而不是再次反转。

        string result = string.Join("", string.Join("", teste.Reverse()).Substring(1, 10).Reverse());
        

        或者创建一个函数:

        public static string SubstringReverse(string str, int reverseIndex, int length) {
            return string.Join("", str.Reverse().Skip(reverseIndex - 1).Take(length));
        }
        

        View function working here!!

        【讨论】:

        • SubstringReverse 函数中,您缺少Reverse。应该是str.Reverse().Skip(reverseIndex - 1).Take(length).Reverse()
        • 索引通常是Zero-based。如果是Skip(reverseIndex),就不会那么混乱了。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-21
        • 1970-01-01
        • 2012-03-26
        • 1970-01-01
        • 1970-01-01
        • 2013-07-18
        • 2013-12-07
        相关资源
        最近更新 更多