使用扫描仪和模式

时间:2016-06-18 15:41:54

标签: java java.util.scanner

我正在尝试从文件中读取双打:

14.23,1.71,2.43,15.6,127,2.8,3.06,.28,2.29,5.64,1.04,3.92,1065,1
13.2,1.78,2.14,11.2,100,2.65,2.76,.26,1.28,4.38,1.05,3.4,1050,1
(...)

使用此方法:

List<Double> values = new ArrayList<>();
(...)
value = Double.parseDouble(scanner.next(Pattern.compile("(?!=\\d\\.\\d\\.)([\\d.]+)")));
(...)
values.add(value);

但这不起作用!我有InputMismatchException,但没有消息,所以我完全不知道发生了什么。模式是错的还是什么?

1 个答案:

答案 0 :(得分:0)

默认情况下,扫描程序使用的分隔符是空格,但在您的数据文件中,显然您使用逗号,即&#34;,&#34;作为分隔符。这就是原因。

如果您想查找下一个匹配并忽略分隔符,请使用scanner.findWithinHorizon(Pattern.compile("(?!=\\d\\.\\d\\.)([\\d.]+)"), 0); 如果您的数据保持在一行中,请使用findInLine(pattern)

或者您也可以使用scanner.useDelimiter(String pattern)分配分隔符,在您的情况下scanner.useDelimiter(",") 请阅读

  

https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html