Java 需要帮助理解字符串长度逻辑吗
我试图理解String length()函数在反转字符串时是如何工作的。 字符串长度是4,那么为什么我需要在下面的工作代码中给出length()-1 下面的代码没有问题,需要帮助才能理解长度()Java 需要帮助理解字符串长度逻辑吗,java,string,Java,String,我试图理解String length()函数在反转字符串时是如何工作的。 字符串长度是4,那么为什么我需要在下面的工作代码中给出length()-1 下面的代码没有问题,需要帮助才能理解长度() 这是因为索引从0开始 字符(0)是字符1。因为索引从0开始,而不是从1开始。因此,如果您有一个长度为4的字符串,那么0,1,2,3是唯一可能的索引。如果在charAt()中作为参数提供的索引小于0或大于或等于字符串长度,则将获得StringIndexOutOfBoundsException异常。在这里,
这是因为索引从0开始
字符(0)是字符1。因为索引从
0开始,而不是从1开始。因此,如果您有一个长度为4
的字符串,那么0,1,2,3
是唯一可能的索引。如果在charAt()
中作为参数提供的索引小于0
或大于或等于字符串长度,则将获得StringIndexOutOfBoundsException
异常。在这里,您可以看到charAt方法的工作原理:
public char charAt(int index) {
if ((index < 0) || (index >= value.length)) {
throw new StringIndexOutOfBoundsException(index);
}
return value[index];
}
公共字符(int索引){
if((索引<0)| |(索引>=value.length)){
抛出新StringIndexOutOfBoundsException(索引);
}
返回值[索引];
}
答案是您正在迭代从0开始的索引
想象一个长度为4的数组。它将存储4个项目,第一个在索引0,第二个在索引1,第三个在2,最后一个在索引3。最后一个元素的索引始终是length()-1
,这就是为什么在循环中将其作为上边框,以避免在迭代时引发索引AutofBoundsException
您可以添加一些控制台输出,以查看每个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的索引,字符串的最后一个索引小于长度1
i、 e
abcd
的长度为4,但要从最后一个字符开始迭代,需要从索引3开始(即d
),因此length()-1
是开始的位置。因为字符串索引从0开始。你的长度是7。如果您访问input.charAt(7)您将得到一个索引超出范围异常
A c h i l i s
0 1 2 3 4 5 6字符串长度始终小于1,因为它从0开始索引位置
如果字符串长度是4,那么索引位置从0到3开始。对于这一点,您只需要理解数组的概念。
假设我们有一个大小为5的int数组。
所以,如果大小为5,这意味着数组索引从0到4,最后一个索引始终是实际大小的-1。
在反转字符串时,同样适用于字符串长度方法。
假设你
String name=“Stack”;
它的长度是5,但最后一个索引是4,因为最后一个索引始终是实际长度的-1。您熟悉数组和字符串索引在非MatLab/Lua语言中的工作方式吗?如果不是的话,我会研究一下。是的,我熟悉数组,索引位置从第0位开始,读入数组数据结构。它们从索引0开始。最后一个索引是length-1。或者是StringIndexOutOfBoundsException
所有这些都继承自IndexOutOfBoundsException
,这要感谢Amit bro,所以字符串的行为将与数组相同,我的意思是索引对于字符串和数组都是常见的。非常感谢兄弟。。。!!是的,字符串中的索引与数组中的索引相同。如果你看到字符串的实现,你会发现它维护着一个字符数组。是的,Goksel bro,感谢你的时间
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);
}
}