我在大学读Java课程。对于我的任务,我必须编写一个程序来显示一个句子中1个字母单词的数量,一个单词中的2个字母单词......等等。该句子是用户输入的。我应该使用循环,我不允许使用数组。
但是现在只是为了开始,我只想找到句子第一个单词中的字母数。我所提供的信函计数错误或错误表示字符串索引超出范围。
Scanner myScanner = new Scanner(System.in);
int letters = 1;
int wordCount1 = 1;
System.out.print("Enter a sentence: ");
String userInput = myScanner.nextLine();
int space = userInput.indexOf(" "); // integer for a space character
while (letters <= userInput.length()) {
String firstWord = userInput.substring(0, space);
if (firstWord.length() == 1)
wordCount1 = 1;
int nextSpace = space;
userInput = userInput.substring(space);
}
System.out.print(wordCount1);
例如,当我输入“这是一个句子”时,它给了我“字符串索引超出范围:4”对此的任何帮助将不胜感激。
答案 0 :(得分:0)
尝试:
int len = userInput.split(" ")[0].length();
这将为您提供由空格分割的单词数组,然后只需获取数组中的第一个位置,最后得到长度。
答案 1 :(得分:0)
userInput.indexOf(" ");
这为您提供了不使用数组的第一个单词的长度。
抛出StringIndexOutOfBoundsException是因为,由于永远不会更新space
,因此代码最终会尝试从长度为2 的字符串中子索引0到4。
如果在while循环中打印了userInput
,则输出为:
This is a sentence
is a sentence
a sentence
ntence
ce
然后抛出StringIndexOutOfBounds。
我在不使用数组的情况下计算句子中的每个单词的方式是:
Scanner in = new Scanner(System.in);
System.out.print("Enter a sentence: ");
String input = in.nextLine();
in.close();
int wordCount = 0;
while (input.length() > 0) {
wordCount++;
int space = input.indexOf(" ");
if (space == -1) { //Tests if there is no space left
break;
}
input = input.substring(space + 1, input.length());
}
System.out.println("The number of word entered is: " + wordCount);
答案 2 :(得分:0)
您的问题是您没有更新空格和信件。 请参阅下面的代码,我的小改动应该可以正常工作。
Scanner myScanner = new Scanner(System.in);
int letters = 1;
int wordCount1 = 1;
String firstWord = null;
System.out.print("Enter a sentence: ");
String userInput = myScanner.nextLine();
int space = -2; //= userInput.indexOf(" "); // integer for a space character
while (letters <= userInput.length() && space != -1) {
space = userInput.indexOf(" ");
if (space != -1)
firstWord = userInput.substring(0, space);
if (firstWord.length() == 1)
wordCount1 = 1;
userInput = userInput.substring(space + 1);
}
System.out.print(wordCount1);
}