为什么nextLine()
方法不起作用?我的意思是,第二次扫描调用后我无法输入任何句子,因为该程序运行到最后并退出。
输入:era era food food correct correct sss sss exit
我应该使用另一个Scanner
对象吗?
import java.util.*;
public class Today{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str="";
String exit="exit";
System.out.println("Please enter some words : ");
while(true){
str=scan.next();
if(str.equalsIgnoreCase(exit)) break;
System.out.println(str);
}
System.out.println("Please enter a sentnce : ");
String sentence1 = scan.nextLine();
System.out.println("the word you entered is : " + sentence1);
}
}
答案 0 :(得分:0)
Scanner#nextLine
要做的是
将此扫描器前进到当前行之后并返回输入 被跳过了。此方法返回当前行的其余部分, 不包括最后的任何行分隔符。
由于您的输入为era era food food correct correct sss sss exit
,因此您在while
内读取每个带有Scanner#next
的单词,因此,在调用Scanner#nextLine
时,它将返回""
(空字符串)因为那条线已一无所有。这就是为什么您看到the word you entered is :
(在文本的开头是空字符串)的原因。
如果您将使用以下输入:era era food food correct correct sss sss exit lastWord
,您将看到the word you entered is : lastWord
要修复,您唯一需要做的就是首先调用scan.nextLine();
,移至下一行以获取用户要提供的新输入,然后获取带有Scanner#nextLine()
的新单词是这样的:
Scanner scan = new Scanner(System.in);
String str="";
String exit="exit";
System.out.println("Please enter some words : ");
while(true){
str=scan.next();
if(str.equalsIgnoreCase(exit)) break;
System.out.println(str);
}
scan.nextLine(); // consume rest of the string after exit word
System.out.println("Please enter a sentnce : ");
String sentence1 = scan.nextLine(); // get sentence
System.out.println("the word you entered is : " + sentence1);