nextLine方法给我一个错误的实现

时间:2018-10-24 17:21:48

标签: java string java.util.scanner

为什么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);
}

}

1 个答案:

答案 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);

演示https://ideone.com/GbwBds