【问题标题】:Why last element of input is missing in Scanner?为什么扫描仪中缺少输入的最后一个元素?
【发布时间】:2017-05-22 14:36:57
【问题描述】:
我使用 IntelliJ,但扫描仪有问题。输出中缺少输入的最后一个元素。有任何想法吗?
输入:1, 2, 3
输出:1, 2
public static void main(String[] args) {
Scanner sc = new Scanner(System.in).useDelimiter(", ");
while (sc.hasNext()) {
System.out.print(sc.nextInt());
}
}
【问题讨论】:
标签:
java
input
stdin
delimiter
【解决方案1】:
因为 Scanner 未完成对 System.in 的读取:stdin 流未关闭,仍在等待令牌结束(", " 的下一次出现)或流结束。
你还需要把sc.hasNext()改成sc.hasNextInt(),因为你消费了sc.nextInt()。
然后你可以在命令行上执行你的程序,它应该正确显示3:
echo -n "1, 2, 3" | java MyScannerExample
但是:
echo "1, 2, 3" | java MyScannerExample
不会显示 3,因为输入字符串实际上是 "1, 2, 3\n",所以最后一个标记是 "3\n",它不是整数。