我正在为学校做这项作业。我试图弄清楚如何从用户给定的字符串中获取单个单词。在我的情况下,单词总是被空格隔开。所以我的代码计算了有多少空格,然后创建了子字符串。如果可以的话请帮忙。
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);
最佳答案
如果我们不必计算空格,则下面的代码会更简洁,但是我假设这是您的约束,因此我继续进行介绍。 (编辑:对JohnG表示赞赏,这是比更改i
更好的方法)
问题在于userSentence.indexOf(" ")
函数将始终返回找到的第一个" "
位置,并且由于您不断增加i
但不对userSentence
进行任何更改,因此substring(i, userSentence.indexOf(" "))
命令不再有意义。
上面的解决方案是声明一个remainder
字符串,该字符串跟踪找到下一个userSentence
之后剩余的testWord
部分。
另一个警告是,如果未找到indexOf()
,则" "
将返回-1,在这种情况下,这意味着您已经死了。在这种情况下,testWord
的将设置为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 + "'");