我试图了解在反转字符串时String length()函数如何工作。 字符串长度是4,那么为什么我需要在下面的工作代码中给出length()-1。
下面的代码没有问题,需要帮助来了解length()
public class MStringReverse {
String getReverse(String input) {
System.out.println(input.length());
String reverse = "";
for(int i = input.length() - 1; i >= 0; i--) {
reverse = reverse + input.charAt(i);
}
return reverse;
}
public static void main(String[] args) {
MStringReverse mr = new MStringReverse();
String result = mr.getReverse("Achilis");
System.out.println(result);
}
}
答案 0 :(得分:9)
因为索引从0, not from 1
开始。因此,如果您的字符串长度为4
,则0,1,2,3
是唯一可能的索引。如果您在charAt()
中作为参数提供的索引是less than 0
或greater than or equals
字符串的长度,那么您将获得StringIndexOutOfBoundsException
异常。在这里,您可以看到charAt方法的工作原理:
public char charAt(int index) {
if ((index < 0) || (index >= value.length)) {
throw new StringIndexOutOfBoundsException(index);
}
return value[index];
}
答案 1 :(得分:8)
那是因为索引从0开始。
charAt(0)是字符1。
答案 2 :(得分:4)
答案是您要迭代从0开始的索引。
想象一个长度为4的数组,它将存储4个项目,第一个存储在索引0,第二个存储在索引1,第三个存储在索引2,最后一个存储在索引3。最后一个元素的索引始终为{{1 }},这就是为什么将其作为循环的上边界,以便在迭代时不引起length() - 1
的原因。
您可以添加一些控制台输出,以每次IndexOutOfBoundsException
查看每次迭代的访问索引,如下所示:
String
答案 3 :(得分:2)
由于基于0的索引,String
的最后一个索引比长度小1。
即
abcd
的长度为4,但是要从最后一个字符开始迭代,则需要从索引3(即d
)开始,因此length()-1
是您开始的地方。 / p>
答案 4 :(得分:2)
因为您的字符串索引从0开始。长度为7。如果您访问 input.charAt(7),则会获得索引超出范围的异常。
A c h i l i s
0 1 2 3 4 5 6
答案 5 :(得分:0)
字符串长度始终小于1,因为它从0开始索引位置。
如果字符串长度为4,则索引位置从0开始到3
答案 6 :(得分:0)
为此,您仅了解数组的概念。 假设我们有一个大小为5的int数组。 因此,如果size为5,则表示数组索引是从0到4,最后一个索引始终是实际大小的-1。 反转字符串时,同样适用于字符串长度方法。 假设你 字符串名称=“堆栈”; 它的长度为5,但最后一个索引为4,因为最后一个索引始终比实际长度大-1。