文字列内の単語をカウントするクラスのプログラムを作成しています。入力された文字列に 3 つ以上の単語がある場合は、文を再度出力しますが、各単語はそれぞれの行に表示されます。
だから私はスペースをに置き換えようとしています\n
。3 語以上の文を入力すると、次のようになります。
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1937)
at lab3.main(lab3.java:32)
これが私のコードです:
import java.util.Scanner;
public class lab3 {
public static void main(String [] args) {
Scanner scan = new Scanner (System.in);
int wordCount = 1;
char aChar;
System.out.println("Enter a sentence.");
String sentence = scan.nextLine();
int charCount = sentence.length();
for (int i=0; i < sentence.length(); i++){
if (sentence.charAt(i) != ' '){
continue;
} else {
wordCount++;
}
}
System.out.println("Number of words = " + wordCount);
if (wordCount >= 4){
for (int i = 0; i <= charCount; i++){
int space = sentence.indexOf(" ");
int endSpace = space + 1;
sentence = sentence.substring(0, space)
+ "\n"
+ sentence.substring(endSpace, sentence.length());
}
System.out.println(sentence);
} else {
System.out.println(sentence);
}
}
}
問題は 31 行目の for ループにあるようですが、3 語を超える文を入力すると -1 が返される仕組みがわかりません。部分文字列を間違って使用していますか? どんな助けでも大歓迎です。