我试图理解String length()函数在反转字符串时是如何工作的。字符串长度是4然后我需要在下面的工作代码中给出length() - 1。
下面的代码没问题,需要帮助理解长度()
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, 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];
}
那是因为索引从0开始。
charAt(0)是字符1。
答案是你正在迭代索引,从0开始。
想象一个长度为4的数组。它将存储4个项目,第一个在索引0,第二个在索引1,第三个在2,最后一个在索引3.最后一个元素的索引总是length() - 1
,这就是你放置的原因它作为循环中的上边界,以便在迭代时不提高IndexOutOfBoundsException
。
你可以添加一些控制台输出来查看每个迭代的每个String
访问的索引,如下所示:
public class MStringReverse {
static String getReverse(String input) {
System.out.println("Input length is " + input.length());
String reverse = "";
for(int i = input.length() - 1; i >= 0; i--) {
System.out.println("accessing index " + i + " of \"input\"");
reverse = reverse + input.charAt(i);
System.out.println("last index of \"reverse\" is now " + (reverse.length() - 1));
}
return reverse;
}
public static void main(String[] args) {
String result = getReverse("Achilis");
System.out.println(result);
}
}
由于基于0的索引,String
的最后一个索引比长度小1。
即
abcd
的长度为4,但是要从最后一个字符开始迭代,你需要从索引3开始(这是d
),因此length()-1
就是你开始的地方。
因为您的字符串索引从0开始。您的长度为7.如果访问input.charAt(7),您将获得超出范围异常的索引。
我是谁
0 1 2 3 4 5 6
字符串长度始终小于1,因为它从0开始索引位置。
如果String长度为4,则索引位置从0开始到3
为此,您只需了解数组的概念。假设我们有一个大小为5的int数组。因此,如果size为5,则表示数组索引从0到4,最后一个索引总是从实际大小开始的-1。在反转字符串的情况下,同样适用于字符串长度方法。假设你String name =“Stack”;它的长度为5,但最后一个索引是4,因为最后一个索引始终是实际长度的-1。