我想从控制台读取几个数字。我想这样做的方法是让用户输入一个由空格分隔的数字序列。代码执行以下操作:
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()){
int i = sc.nextInt();
//... do stuff with i ...
}
问题是,当到达新行时如何停止(同时保持上面易于阅读的代码)?在上面的参数中添加!hasNextLine()会使其立即退出循环。一种解决方案是读取整行并解析数字,但我认为有点破坏了hasNextInt()方法的目的。
答案 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()手动读取数字)。