计算短语中的空白字符 - Java

时间:2012-10-12 22:00:19

标签: java

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

线程“main”中的异常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 ();
            }
        }

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

详细说明并解释一下答案:

循环的条件:

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

指示程​​序执行以下操作:

  1. 使用'length'项目获取数组,并从其第0个元素开始。
  2. 处理第0个元素
  3. 转到下一个第i个元素,然后处理它。
  4. 继续执行第3步,直至到达 index = length
  5. 的元素

    根据定义,您要迭代的数组必须在步骤#4失败。由于数组从0开始索引,因此具有'n'个元素的数组的最大索引为'n-1'。

答案 2 :(得分:0)

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

public static 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");

}