我正在为班级做这个小小的硬件问题。我的程序的重点是从用户输入中计算短语中的所有空白字符。一切都很好,直到我到达我的循环。我在循环中设置了一个断点,它会运行罚款并计算空白字符。但是当循环结束时程序崩溃并给我这个错误:
线程“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 ();
}
}
答案 0 :(得分:1)
您正在尝试读取超出字符串phrase
长度的字符。要修复,您可以使用:
for (int i = 0; i < length; i++) {
答案 1 :(得分:1)
详细说明并解释一下答案:
循环的条件:
for(int i =0; i<=length; i++ )
指示程序执行以下操作:
根据定义,您要迭代的数组必须在步骤#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");
}