字符串索引超出范围?(Java,子串循环)

Bra*_*rad 3 java substring while-loop

我正在为COSC课程制作的这个程序没有正确编译,我不断收到错误:

线程"main"中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:2

在VowelCount.main的java.lang.String.substring(String.java:1765)(VowelCount.java:13)

这是我的代码:

import java.util.Scanner;

public class VowelCount {
 public static void main(String[] args) {
  int a = 0, e = 0, i = 0, o = 0, u = 0, count = 0;
  String input, letter;
  Scanner scan = new Scanner (System.in);

  System.out.println ("Please enter a string: ");
  input = scan.nextLine();

  while (count <= input.length() ) {
   letter = input.substring(count, (count + 1));

   if (letter == "a") {
    a++; }
   if (letter == "e") {
    e++; }
   if (letter == "i") {
    i++; }
   if (letter == "o") {
    o++; }
   if (letter == "u") {
    u++; }

   count++;

  }
  System.out.println ("There are " + a + " a's.");
  System.out.println ("There are " + e + " e's.");
  System.out.println ("There are " + i + " i's.");
  System.out.println ("There are " + o + " o's.");
  System.out.println ("There are " + u + " u's.");
 }
}
Run Code Online (Sandbox Code Playgroud)

据我所知,这应该有效,但为什么不呢?任何帮助都会很棒.谢谢!

Vin*_*nie 5

您可能需要取出行中的=

while (count <= input.length() ) {
Run Code Online (Sandbox Code Playgroud)

并使它

while (count < input.length() ) {
Run Code Online (Sandbox Code Playgroud)

因为它导致子串读取超出字符串的长度.

===============但是我会添加一些额外的建议,即使它没有被要求:

不要使用==来比较字符串,使用

letter.equals("a")
Run Code Online (Sandbox Code Playgroud)

代替.或者甚至更好,尝试使用

char c = input.charAt(count);
Run Code Online (Sandbox Code Playgroud)

获取当前字符然后比较如下:

c == 'a'
Run Code Online (Sandbox Code Playgroud)