这可能有一个非常明显的答案,但我刚开始学习Java并发现了这一点。
说我们有
String x = "apple";
为什么x.substring(5)
返回""
,空字符串x.substring(6)
会引发IndexOutOfBounds
异常?是否有某种空字符串可以被引用附加到每个字符串?只是不确定它是如何工作的。
谢谢!
答案 0 :(得分:4)
Javadoc对public String substring(int beginIndex)
说:
“返回一个新字符串,它是该字符串的子字符串。子字符串从指定的beginIndex开始,并扩展到索引endIndex处的字符 - 1.因此子字符串的长度为endIndex-beginIndex。”
“apple”的长度为5,因此x.substring(5)
的长度为5 - 5 == 0.
另一方面,api doc说如果
“... endIndex大于此String对象的长度......”您遇到的异常将被抛出。对于x.substring(6)
,您的endIndex为6,而String对象的长度为5.
你问的是“是否有某种空字符串可以被引用到每个字符串中?”。我会说是的,这在某种程度上是正确的:空字符串在任何字符串的任何位置都被“包含”,并且它可以附加到任何字符串而不更改它。但我不确定这种查看方式是否有帮助...
答案 1 :(得分:3)
Java子字符串接受值0
到variable.length
(包括)。
给定的数字不是指字符的位置,而是指字符之间的点的位置。例如:
0 :a: 1 :p: 2 :p: 3 :l: 4 :e: 5
5
返回一个空字符串,因为之后没有字符。
6
会抛出异常,因为没有第六个位置。
答案 2 :(得分:-1)
这是子串的来源
public String substring(int beginIndex) {
if (beginIndex < 0) {
throw new StringIndexOutOfBoundsException(beginIndex);
}
int subLen = value.length - beginIndex; // if less than 0, throw Exception
//the value.length is your String.length
if (subLen < 0) {
throw new StringIndexOutOfBoundsException(subLen);
}
return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);
}
当你的beginIndex是biger时,那么value.length(String.length)这将是一个例外