字符串索引越界? (Java中,子环)(String index out of bounds?

2019-08-18 04:47发布

这个节目,我正在做一个COSC当然不是编译吧,我不断收到错误:

例外在线程“主” java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:2

在java.lang.String.substring(String.java:1765)在VowelCount.main(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.");
 }
}

据我所知,这应该工作,但为什么不呢? 任何帮助将是巨大的。 谢谢!

Answer 1:

您可能需要取出=该行

while (count <= input.length() ) {

并使它

while (count < input.length() ) {

因为它是造成子读取超出字符串的长度。

===============但我会补充意见的,即使它不是问了几个额外的比特:

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

letter.equals("a")

代替。 甚至更好,尝试使用

char c = input.charAt(count);

获得当前字符,然后比较是这样的:

c == 'a'


Answer 2:

我觉得你的循环条件应该是count < input.length 。 眼下,最后一次迭代与运行count == length ,所以你的substring呼叫字符串,这是违法的最后一个字符之后给出一个开始索引。 写这样的循环时,这些类型的边界错误是很常见的,所以这是一件好事,双精度和三重检查您的循环条件下,如果遇到这样的错误。

另外,在比较字符串==操作符通常不会做你想要的。 用于比较两个变量是否引用同一个对象。 相反,你要测试string1.equals(string2)这两个字符串的内容进行比较。



Answer 3:

删除等号应该解决这个问题。

while (count < input.length()) {

既然你想获得一个字符,你应该这样做:

substr(count,1)

因为第二个参数是实际长度,而不是指数。



Answer 4:

从大家的帮助,特别是文森特固定它。 谢谢! 奇妙的运行。

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;
        char letter;

        Scanner scan = new Scanner (System.in);

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

        while (count < input.length() ) {
            letter = input.charAt (count);

            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.");
    }
}


Answer 5:

循环之前,请尝试以下

if(input.length()>0){
//you code
}


文章来源: String index out of bounds? (Java, substring loop)