Annoying String Substring&指数

时间:2015-08-27 15:40:19

标签: c#

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

考虑以下内容......

 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是不同的?从它的开始索引到endindex ... http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring(int,%20int)

5 个答案:

答案 0 :(得分:3)

可能你正在寻找

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

表示:"从myString.LastIndexOf(',')开始,一直到字符串的结尾"。

答案 1 :(得分:2)

这是一个非常简单的错误。 {/ 3}}保证在

时抛出ArgumentOutOfRangeException
  

startIndexlength表示不在此实例中的位置。

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:0)

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

string Substring(int index, int length);

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

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

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

答案 4 :(得分:0)

是的,我发现自己做了很多次

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

而C#是

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

Java有它自己的东西,但也让我烦恼。为什么string ==是通过引用而不是值,我永远不会理解。