我想我解决了我的主要问题,虽然我不太了解,所以我会请这里的某人给我一个很好的解释,或者像我一样向我解释。
考虑以下内容......
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)
答案 0 :(得分:3)
可能你正在寻找
Console.WriteLine(myString.SubString(myString.LastIndexOf(',')));
表示:"从myString.LastIndexOf(',')
开始,一直到字符串的结尾"。
答案 1 :(得分:2)
这是一个非常简单的错误。 {/ 3}}保证在
时抛出ArgumentOutOfRangeException
startIndex
加length
表示不在此实例中的位置。
这正是您所看到的:最后一个索引“,”加上字符串的总长度超过了您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 + length
。 index + 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 ==是通过引用而不是值,我永远不会理解。