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

时间:2018-08-29 14:09:02

标签: java string

我试图了解在反转字符串时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);
    }
}

7 个答案:

答案 0 :(得分: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];
}

答案 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。