我正在为学校做这项功课。我试图弄清楚如何从用户给出的字符串中获取单个单词。就我而言,单词始终用空格分隔。所以我的代码计算有多少空格然后生成子串。如果可以,请帮忙。
System.out.print("Please enter a sentence: ");
String userSentence=IO.readString();
String testWord="";
int countSpaces=0;
for(int j=0; j<userSentence.length(); j++){
if((userSentence.charAt(j))==' '){
countSpaces++;
}
}
for(int i=0; i<userSentence.length(); i++){
if(countSpaces>0){
while(userSentence.charAt(i)==' '){
i++;
countSpaces--;
}
testWord=userSentence.substring(i, userSentence.indexOf(" "));
i=i+(testWord.length()-1);
}
if(countSpaces==0){
testWord=userSentence.substring(i);
i=userSentence.length();
}
System.out.print(testWord);
答案 0 :(得分:0)
由于您没有提供整个代码部分,我只会指出您发布的内容有问题...
以下是您的for
循环,其中“i”为其计数器...
for(int i=0; i<userSentence.length(); i++)
{
// … Rarely (if ever) is “ i ” changed inside this loop!
i++; // <--- this will cause a problem
i=userSentence.length(); // <--- so will this
}
这将设置为遍历userSentence
中的每个字符。 “i”是循环的计数器变量。如果你在循环中更改了计数器变量“i”(你做了好几次),那么你很可能会得到意想不到的结果。 “i”由循环结构自动递增。如果你改变它,循环很可能会破坏或不能按预期工作。
当你到达时出现错误...
testWord=userSentence.substring(i, userSentence.indexOf(" "));
考虑到它使用“i”作为索引,这并不罕见。 只是一个想法。
答案 1 :(得分:0)
如果我们不必计算空格,下面的代码会更清晰,但我假设这是你的约束,所以我正在滚动它。 (编辑:向JohnG致敬,因为有更好的方法来改变i
)
问题是,userSentence.indexOf(" ")
函数将始终返回{em>找到" "
的第一个位置,并且因为您继续递增i
但不做对userSentence
的任何更改,substring(i, userSentence.indexOf(" "))
命令都不再合理。
上述解决方案是声明一个remainder
字符串,用于跟踪找到下一个userSentence
后剩余的testWord
部分。
另一个警告是indexOf()
如果没有找到" "
的出现,将返回-1,在这种情况下意味着你在你的最后一个字上。在这种情况下,testWord
的{{1}}将设置为remainder
的结尾。
这就是我所拥有的。再次,超级笨重,但我试图不重写你所拥有的一切:
System.out.print("Please enter a sentence: ");
String userSentence=IO.readString();
String testWord="";
int countSpaces=0;
for(int j=0; j<userSentence.length(); j++){
if((userSentence.charAt(j))==' '){
countSpaces++;
}
}
for(int i=0; i<userSentence.length(); i++){
while(i<userSentence.length() && userSentence.charAt(i)==' '){
i++;
countSpaces--;
}
if(i<userSentence.length()){
String remainder = userSentence.substring(i);
if(countSpaces==0){
testWord=userSentence.substring(i);
i=userSentence.length();
} else {
remainder = userSentence.substring(i);
int endOfWordIndex = remainder.indexOf(" "); // set end of word to first occurrence of " "
if(endOfWordIndex == -1){ // if no " " found,
endOfWordIndex = remainder.length(); // set end of word to end of sentence.
}
testWord=remainder.substring(0, endOfWordIndex);
i=i+(testWord.length()-1);
}
System.out.println("word: '" + testWord + "'");