3 回答
TA贡献1795条经验 获得超7个赞
我无法阅读这些正则表达式,它们对于普通人来说太复杂了。
为什么要使用复杂的正则表达式,其他开发人员很难阅读。如果我必须调试该代码,我会讨厌它。
我觉得像下面这样的东西会更具可读性,并且也会减少错误的机会,并且易于调试:
public double sumFile(String filename) {
try (Stream<String> linesStream = Files.lines(Paths.get(filename))) {
return linesStream.mapToDouble(this::sumLine).sum();
} catch (IOException e) {
e.printStackTrace();
}
return 0;
}
private double sumLine(String line) {
return Arrays.stream(line.split(","))
.filter(e -> e.split("\\.").length <= 2)
.mapToDouble(Double::parseDouble)
.sum();
}
TA贡献1155条经验 获得超0个赞
错误数字的子串实际上有效的问题。“1.2.3”应该被忽略,但如果您只是盲目地寻找有效数字,那么这个数字可能包含“1.2”或“2.3”作为有效数字。
有两种方法可以避免这种情况:
用已知的分隔符“,”分割该行,并验证每个部分是否有效或
搜索有效和无效的号码并丢弃无效的号码。
为此,您可以使用正则表达式
-?\d+\.?\d*(\.d*)?
,并在匹配组非空时丢弃结果。
添加回答
举报