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

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

Scanner sc = new Scanner(System.in); while (sc.hasNextInt()){ int i = sc.nextInt(); //... do stuff with i ... } 

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

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

 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键以进行扫描。 这可以根据需要用尽可能多的行重复。 完成后,用户只需再次输入而不输入数字。 输入很多数字时,认为这很方便。

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