【问题标题】:Annoying String Substring & IndexOf烦人的字符串子字符串和索引
【发布时间】:2015-08-27 15:40:19
【问题描述】:

我想我解决了我的主要问题,虽然我不太了解,所以我会在这里请人给我一个好的解释,或者像我 5 岁一样向我解释。

考虑以下...

 String myString = "something that thing, another thing"; 
 Console.WriteLine(myString.SubString(0, myString.Length)); 

上面只会打印出整个字符串,没关系。我没有对 myString 进行任何真正的更改。

继续,使用相同的 myString

Console.WriteLine(myString.SubString(0, myString.LastIndexOf(','))); 

这会像预期的那样给我“某样东西”。

现在是愚蠢的部分,因为据我了解,我从未使用 LastIndexOf() 或 .Length 更改 myString

Console.WriteLine(myString.SubString(myString.LastIndexOf(','), myString.length)); 

这将引发 ArgumentOutOfIndexExpcetion。因为显然我更改了 myString...所以现在...在 ',' 之后获取字符串的一半的正确方法是...

Console.WriteLine(myString.SubString(myString.LastIndexOf(','), (myString.length - myString.LastIndexOf(',')))); 

主要问题

如果我从不更改 myString 的开头,为什么我需要重新格式化我的索引...不是 String 类中的所有方法都使 String 永远不会更改。

所以Java subString 是不同的?因为它的开始索引到结束索引... http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring(int,%20int)

【问题讨论】:

  • Java 比 C# 更有意义的一个很好的例子。 Java - substring(int startIndex, int endIndex) 在我看来比它的 C# 对应物更有效。

标签: c#


【解决方案1】:

你可能正在寻找

  Console.WriteLine(myString.SubString(myString.LastIndexOf(','))); 

这意味着:“从myString.LastIndexOf(',') 开始直到字符串的结尾”。

【讨论】:

    【解决方案2】:

    这是一个非常简单的错误。 Substring(int startIndex, int length) 保证在

    时抛出 ArgumentOutOfRangeException

    startIndex 加上length 表示不在此实例中的位置。

    这正是您所看到的:“,”的最后一个索引加上字符串的总长度超过了您 Substringing 来自的字符串的总长度。

    【讨论】:

    【解决方案3】:

    您不是在重新格式化您的索引,而是在重新格式化您正在使用的字符串的长度。 SubString 方法接受起始索引和长度。所以在你的代码中:

    Console.WriteLine(myString.SubString(myString.LastIndexOf(','), myString.length)); 
    

    你从字符',' 的最后一个索引开始,但你仍然告诉它取整个字符串的长度。它不能那样做。你告诉它从第 21 个字符开始,然后取接下来的 35 个字符。你的字符串必须有 56 个字符才能做到这一点。

    【讨论】:

      【解决方案4】:

      是的,我发现自己经常这样做

      text = text.substring(text.indexOf(something),text.indexOf(somethingElse));
      

      而 C# 是

      text = text.Substring(text.IndexOf(something),text.Length - text.IndexOf(somethingElse));
      

      Java 有它自己的东西,但也让我很恼火。为什么 string == 是引用而不是值,我永远不会明白。

      【讨论】:

        【解决方案5】:

        问题在于,据我所知,Substring 的样式仅由 JS/Java 执行。 Substring在.Net中的签名是:

        string Substring(int index, int length);
        

        这意味着 .Net(和大多数其他标准库)将从 index 获取字符串,直到 index + lengthindex + length 超出了字符串的末尾,因此您会收到异常。您可能正在寻找的是:

        Console.WriteLine(myString.Substring(myString.LastIndexOf(',') + 1));
        

        它将在最后一次出现“,”之后获取所有内容。如果 ',' 没有出现,它会给你整个字符串。如果您不指定 length 参数,Substring 将为您提供从您指定的 index 到字符串末尾的所有内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-10
          • 2010-12-15
          • 1970-01-01
          • 2014-05-08
          • 2017-02-09
          • 1970-01-01
          • 2019-06-03
          • 1970-01-01
          相关资源
          最近更新 更多