我正在编写一个用于计算字符串中单词的类的程序,如果输入的字符串超过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的。我使用子串错了吗? 任何帮助将不胜感激。
答案 0 :(得分:2)
您需要在此处检查space
的索引。如果找不到搜索字符串,String.indexOf()
将返回-1
。
int space = sentence.indexOf(" ");
int endSpace = space + 1;
if (space != -1) {
sentence = sentence.substring(0, space) + "\n"
+ sentence.substring(endSpace, sentence.length());
}
答案 1 :(得分:1)
如果您想保留代码,那么在执行 sentence.index(“”)时,如果返回-1,则必须进行检查。如果它返回你的循环突破如下。 但是,这不是一种很好的编码方式。我宁愿使用String API中的正则表达式或其他更简单的方法。
if (wordCount >= 4){
for (int i = 0; i <charCount-3; i++){
int space = sentence.indexOf(" ");
if(space==-1){// check if space is -1
break;
}
System.out.println(i+ " " + space);
int endSpace = space + 1;
sentence = sentence.substring(0, space)
+ "\n"
+ sentence.substring(endSpace, sentence.length()-1);
}
System.out.println(sentence);
答案 2 :(得分:0)
String#split(...)
方法,只需几行代码即可解决这个问题。 for
循环或循环charCount次,因为charCount是String的大小,你肯定不想循环这么多次。它没有意义。相反,你想循环空格的数量,而不是字符的数量,这使我得到了下一个建议:while
循环,而不是for
循环并循环,直到indexOf(...)
方法返回-1。换句话说,让Java尽一切努力弄清楚String何时耗尽空间而不是你猜测。答案 3 :(得分:0)
我的解决方案不检查实际上不是单词的单词,
import java.util.Scanner;
public class SentenceWordCount {
Scanner s = new Scanner (System.in);
int wordCount;
public SentenceWordCount() {
System.out.println("Enter a sentence");
String sentenceEntered = s.nextLine();
String[] brokenSentence = sentenceEntered.split(" ");
wordCount = brokenSentence.length;
if(wordCount > 3){
for(String s : brokenSentence){
System.out.println(s);
}
}
System.out.println("Number of words equals : " + wordCount);
}
}
干杯,
杰米