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

问题描述 投票:4回答:7

我试图理解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);
    }
}
java string
7个回答
9
投票

因为指数从0, not from 1开始。因此,如果你有一个长度为4的字符串,那么0,1,2,3是唯一可能的索引。如果你在charAt()中作为参数提供的索引是less than 0greater than or equals字符串的长度那么你将获得StringIndexOutOfBoundsException异常。在这里您可以看到charAt方法的工作原理:

public char charAt(int index) {
    if ((index < 0) || (index >= value.length)) {
        throw new StringIndexOutOfBoundsException(index);
    }
    return value[index];
}

8
投票

那是因为索引从0开始。

charAt(0)是字符1。


4
投票

答案是你正在迭代索引,从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);
    }
}

2
投票

由于基于0的索引,String的最后一个索引比长度小1。

abcd的长度为4,但是要从最后一个字符开始迭代,你需要从索引3开始(这是d),因此length()-1就是你开始的地方。


2
投票

因为您的字符串索引从0开始。您的长度为7.如果访问input.charAt(7),您将获得超出范围异常的索引。

我是谁

0 1 2 3 4 5 6


0
投票

字符串长度始终小于1,因为它从0开始索引位置。

如果String长度为4,则索引位置从0开始到3


0
投票

为此,您只需了解数组的概念。假设我们有一个大小为5的int数组。因此,如果size为5,则表示数组索引从0到4,最后一个索引总是从实际大小开始的-1。在反转字符串的情况下,同样适用于字符串长度方法。假设你String name =“Stack”;它的长度为5,但最后一个索引是4,因为最后一个索引始终是实际长度的-1。

© www.soinside.com 2019 - 2024. All rights reserved.