为什么scanner.hasNextInt()方法需要一个字母才能开始处理数字?

时间:2018-12-17 14:00:10

标签: java integer java.util.scanner delimiter

我正在尝试使用Scanner.hasNextInt()方法从用户那里获取一些整数输入。它可以正常工作,但是我需要输入一个字母以使程序知道我已经输入完整数,而我希望控制台知道在单行之后按Enter键后才知道。

例如,我键入 (1 2 3 ÿ 输入) 该程序工作正常,但如果我键入 (1 2 3 输入 输入) 即使我一直按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();
    }
}

1 个答案:

答案 0 :(得分:3)

了解它的三个步骤。

  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. enter产生的换行符是空白。当您输入多个enter时,它们将被识别为定界符,而不是标记。

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

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