我不明白length()在这段代码中是如何工作的

时间:2017-08-06 16:59:11

标签: java

有人可以为我解释一下这段代码,尤其是这部分。

int lastpos = message.length() - 1;

他为什么加1?

==

    System.out.print("What is your message? ");
    String message = kb.nextLine();

    System.out.println("\nYour message is " + message.length() + " characters long.");
    System.out.println("The first character is at position 0 and is '" + message.charAt(0) + "'.");
    int lastpos = message.length() - 1;
    System.out.println("The last character is at position " + lastpos + " and is '" + message.charAt(lastpos) + "'.");
    System.out.println("\nHere are all the characters, one at a time:\n");

    for ( int i=0; i < message.length(); i++ )
    {
        System.out.println("\t" + i + " - '" + message.charAt(i) + "'");
    }

    int a_count = 0;

    for ( int i=0; i<message.length(); i++ )
    {
        char letter = message.charAt(i);
        if ( letter == 'a' || letter == 'A' )
        {
            a_count++;
        }
    }

    System.out.println("\nYour message contains the letter 'a' " + a_count + " times. Isn't that interesting?");

}

}

2 个答案:

答案 0 :(得分:2)

因为指数从0开始。如果您有一个{0, 1, 2}列表,请注意它的长度为3,但最后一个索引仅为2. - 1用于校正该值。

如果你迭代到索引3的元素(列表的长度),你就会离开列表的末尾,导致IndexOutOfBoundsException

注意,我使用列表作为一个例子以便于理解,但它与字符串完全相同。所有迭代都以索引0开始。

答案 1 :(得分:0)

假设您有一个字符串“Abdullah”,然后您想要打印该字符串的最后一个字符 int lastpos = message.length() - 1 Iine为你提供了String的最后一个字符。 所以在给定的代码中,行打印输入String的最后一个字符。