0

我正在为班级做这个小硬件问题。我的程序的重点是计算用户输入中短语中的所有空白字符。在我到达我的 for 循环之前,一切都很好。我在循环中设置了一个断点,它运行良好并计算空白字符。但是当循环结束时程序崩溃并给我这个错误:

线程“主”java.lang.StringIndexOutOfBoundsException 中的异常:字符串索引超出范围:5

我不太明白是否有人能指出我正确的方向。

import java.util.Scanner;
public class Cray {
    public static void main(String[] args){
              String phrase;    // a string of characters
              int countBlank;   // the number of blanks (spaces) in the phrase 
              int length;       // the length of the phrase
              char ch;          // an individual character in the string

            Scanner scan = new Scanner(System.in);

              // Print a program header
              System.out.println ();
              System.out.println ("Character Counter");
              System.out.println ();

              // Read in a string and find its length
              System.out.print ("Enter a sentence or phrase: ");
              phrase = scan.nextLine();
              length = phrase.length();

              // Initialize counts
              countBlank = 0;

              // a for loop to go through the string character by character
              // and count the blank spaces

              for(int i =0; i<=length; i++ ){
                  if(phrase.charAt(i)==' '){
                      countBlank++;

              }
              }


              // Print the results
              System.out.println ();
              System.out.println ("Number of blank spaces: " + countBlank);
              System.out.println ();
            }
        }
4

3 回答 3

1

您正在尝试读取超出 String 长度的字符phrase。要修复,您可以使用:

for (int i = 0; i < length; i++) {
于 2012-10-12T22:02:06.330 回答
1

详细说明和解释给出的答案:

循环的条件:

for(int i =0; i<=length; i++ )

指示程序执行以下操作:

  1. 取一个包含 'length' 项的数组,并从其第 0 个元素开始。
  2. 处理第 0 个元素
  3. 继续下一个,第 i 个元素,并处理它。
  4. 继续执行第 3 步,直到到达index = length处的元素

根据定义,您正在迭代的数组将不得不在第 4 步失败。由于数组从 0 开始索引,因此具有“n”个元素的数组的最大索引为“n-1”。

于 2012-10-12T22:05:57.770 回答
0

实际上 Scanner 会忽略 Spaces 所以使用 BufferedReader

公共静态 void main(String[] args) 抛出 IOException {

    BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
     String word=null;
    System.out.println("Enter string input: ");
    word = br.readLine(); 
    String data[] ;
    int k=0; 
    data=word.split("");
    for(int i=0;i<data.length;i++){
        if(data[i].equals(" ")) 
        k++; 
    } 
    if(k!=0)        
    System.out.println(k);
    else
        System.out.println("not have space");

}
于 2013-02-08T22:21:26.340 回答