继续阅读数字,直到使用扫描仪到达换行符

时间:2011-02-21 21:25:45

标签: java input numbers java.util.scanner

我想从控制台读取几个数字。我想这样做的方法是让用户输入一个由空格分隔的数字序列。代码执行以下操作:

Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()){
    int i = sc.nextInt();

    //... do stuff with i ...
}

问题是,当到达新行时如何停止(同时保持上面易于阅读的代码)?在上面的参数中添加!hasNextLine()会使其立即退出循环。一种解决方案是读取整行并解析数字,但我认为有点破坏了hasNextInt()方法的目的。

2 个答案:

答案 0 :(得分:7)

您想要像这样设置分隔符:

Scanner sc = new Scanner(System.in);
sc.useDelimiter(System.getProperty("line.separator")); 
while (sc.hasNextInt()){
    int i = sc.nextInt();

    //... do stuff with i ...
}

<强>更新

如果用户输入一个数字然后点击输入,则上述代码效果很好。当没有输入数字时按Enter键,循环将终止。

如果您需要(更多地将其理解为可用性的建议)输入分隔的数字空间,请查看以下代码:

Scanner sc = new Scanner(System.in);
Pattern delimiters = Pattern.compile(System.getProperty("line.separator")+"|\\s");
sc.useDelimiter(delimiters); 
while (sc.hasNextInt()){
    int i = sc.nextInt();
    //... do stuff with i ...
    System.out.println("Scanned: "+i);
}

它使用Pattern作为分隔符。我将其设置为匹配空格或行分隔符。因此,用户可以输入空格分隔的数字,然后按Enter键以进行扫描。这可以根据需要用尽可能多的行重复。完成后,用户只需再次输入,而无需输入数字。输入很多数字时认为这很方便。

答案 1 :(得分:2)

您可以使用sc.nextLine()读取输入行,然后从该String构造一个新的Scanner(有一个带有String的构造函数重载)并从第二个Scanner读取int。 (注意:如果你的意思是“阅读整行并解析数字”,我会删除这个答案,但看起来你在谈论用Integer.parseInt()手动读取数字)。