处理控制台输入(换行符)

时间:2013-07-02 09:25:53

标签: java java.util.scanner

对于Java中的控制台菜单,我有时想读取整数和一些字符串。我有这两个功能:

获取字符串:

public String enterString(String question) {
    System.out.println(question);
    return scanner.nextLine();
}

获取int(稍后为switch语句):

public int choose(int b, String question) {
    Boolean chosen = false;     
    while(!chosen) {
        chosen = true;
        System.out.println(question);
        int choice = scanner.nextInt();

        if(choice >= 0 && choice <= b) {
            return choice;
        }
        else {
            chosen = false;
            System.out.println("Not a valid choice.");
        }
    }
    return 0; //the compiler complains otherwise
}

但是,如果我先使用enterString(),然后使用choose()然后使用enterString(),则可能会使用来自select的换行符。在各个地方输入scanner.nextLine()(每个功能的开始和结束)总是会引起问题。

如何将这两种作品组合在一起?

2 个答案:

答案 0 :(得分:3)

nextInt()不会消耗EOL。因此,扫描Int

 int choice = Integer.parseInt(scanner.nextLine());

或者,消耗额外的新行

 int choice = scanner.nextInt();
 scanner.nextLine(); // Skip

答案 1 :(得分:1)

scanner.nextInt()不消耗行尾。 您可以将whileLine包装在while循环中,如果该行为空,则再次请求输入。