我正在尝试使用 Java 中的 Scanner 类扫描负数。
我有这个输入文件:
1
-1,2,3,4
我的代码如下:
Scanner input = new Scanner(new File("data/input.txt"));
int i = input.nextInt();
input.useDelimiter(",|\\s*"); //for future use
int a = input.nextInt();
System.out.println(i);
System.out.println(a);
我的预期输出应该是
1
-1
相反,我得到一个错误(类型不匹配)。
当我这样做
String a = input.next();
代替
int a = input.nextInt();
我不再收到错误,而是收到
1
-
最佳答案
分隔符是逗号或 0 个或多个空白 ('\s') 字符。 *
表示“0 个或多个”。 Scanner
在 -
和 1
之间发现“0 个或多个”空白字符,因此它将这些字符拆分,最终导致输入不匹配异常。
您将需要 1 个或多个空白字符作为分隔符,因此将 *
更改为 +
以反射(reflect)该意图。
input.useDelimiter(",|\\s+");
进行此更改时,我得到了您预期的输出:
1
-1
关于java - 扫描仪不会扫描负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28076076/