Java 需要帮助理解字符串长度逻辑吗

Java 需要帮助理解字符串长度逻辑吗,java,string,Java,String,我试图理解String length()函数在反转字符串时是如何工作的。 字符串长度是4,那么为什么我需要在下面的工作代码中给出length()-1 下面的代码没有问题,需要帮助才能理解长度() 这是因为索引从0开始 字符(0)是字符1。因为索引从0开始,而不是从1开始。因此,如果您有一个长度为4的字符串,那么0,1,2,3是唯一可能的索引。如果在charAt()中作为参数提供的索引小于0或大于或等于字符串长度,则将获得StringIndexOutOfBoundsException异常。在这里,

我试图理解String length()函数在反转字符串时是如何工作的。 字符串长度是4,那么为什么我需要在下面的工作代码中给出length()-1

下面的代码没有问题,需要帮助才能理解长度()


这是因为索引从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);
    }
}