首页 > 解决方案 > 为什么scanner.hasNextInt() 方法需要一个字母来开始处理数字?

问题描述

我正在尝试使用scanner.hasNextInt() 方法从用户那里获取一些整数输入。它工作得很好,但我需要输入一个字母让程序知道我已经完成了输入整数,而我希望控制台知道在我在一行之后按下回车键之后。

例如,我输入 (1 2 3 y enter) 并且程序运行良好,但如果我输入 (1 2 3 enter enter) 则没有任何反应,即使我一直按 enter 键。这是我的代码的相关部分,如果你需要看一下。

public class Main {
    static LinkedList linkedList =new LinkedList();

    public static void main(String [] args){
       System.out.println("enter integer numbers");
       Scanner scanner=new Scanner(System.in);
       while (scanner.hasNextInt()){
          linkedList.append(scanner.nextInt());
       }
       print();
    }
}

标签: javaintegerjava.util.scannerdelimiter

解决方案


三步就懂了。

  1. Scanner使用分隔符将输入分解为标记,默认分隔符为\p{javaWhitespace}+. 尝试

    Scanner scanner = new Scanner(System.in);
    System.out.println(scanner.delimiter());
    
  2. \p{javaWhitespace}等价于java.lang.Character.isWhitespace(),所以\p{javaWhitespace}+将匹配多个字符 其中isWhitespace.

  3. key 产生的换行符enter是一个空格。当您输入多个enters 时,它们将被识别为分隔符,而不是标记。

您可以使用 s 单个空格,因此它将第二个enter作为标记:

scanner.useDelimiter("\\p{javaWhitespace}");

推荐阅读