猿问

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

我试图了解 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);

    }

}


翻翻过去那场雪
浏览 158回答 3
3回答

ITMISS

由于索引从0, not from 1. 因此,如果您有一个长度为 String 的字符串,4则0,1,2,3是唯一可能的索引。如果您提供的索引作为参数charAt()isless than 0或greater than or equals字符串的长度,那么您将得到StringIndexOutOfBoundsException异常。在这里你可以看到 charAt 方法是如何工作的:public char charAt(int index) {&nbsp; &nbsp; if ((index < 0) || (index >= value.length)) {&nbsp; &nbsp; &nbsp; &nbsp; throw new StringIndexOutOfBoundsException(index);&nbsp; &nbsp; }&nbsp; &nbsp; return value[index];}

鸿蒙传说

那是因为索引从 0 开始。charAt(0) 是字符 1。

拉莫斯之舞

答案是您正在迭代从 0 开始的索引。想象一个长度为 4 的数组。它将存储 4 个项目,第一个在索引 0,第二个在索引 1,第三个在 2,最后一个在索引 3。最后一个元素的索引总是length() - 1,这就是为什么你把它作为循环中的上边界,以便不提高IndexOutOfBoundsExceptionwhile 迭代。您可以添加一些控制台输出来查看String每次迭代的访问索引,如下所示:public class MStringReverse {&nbsp; &nbsp; static String getReverse(String input) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("Input length is " + input.length());&nbsp; &nbsp; &nbsp; &nbsp; String reverse = "";&nbsp; &nbsp; &nbsp; &nbsp; for(int i = input.length() - 1; i >= 0; i--) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println("accessing index " + i + " of \"input\"");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; reverse = reverse + input.charAt(i);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println("last index of \"reverse\" is now " + (reverse.length() - 1));&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return reverse;&nbsp; &nbsp; }&nbsp; &nbsp; public static void main(String[] args) {&nbsp; &nbsp; &nbsp; &nbsp; String result = getReverse("Achilis");&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(result);&nbsp; &nbsp; }}
随时随地看视频慕课网APP

相关分类

Java
我要回答