检索文件中的所有双数并返回总和,但避免使用多个点的值。
测试用例:
在文件中
12.3,123.45,19,2.16.8.1.1
输出
预期输出 -> 154.75 我的输出 -> 166.01
-?\\d+\\.?\\d*
这将检索所有双数字,但无法忽略带有多个点的数字。
FileReader reader = new FileReader(filename);
BufferedReader in = new BufferedReader(reader);
String line;
while ((line = in.readLine()) != null) {
Pattern pattern = Pattern.compile("-?\\d+\\.?\\d*");
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
String x = matcher.group(0);
y = Double.parseDouble(x);
sum = sum + y;
}
}
预期输出 -> 154.75 我的输出 -> 166.01
最佳答案
您可以使用
-?(?<!\d)(?<!\d\.)\d*\.?\d+(?!\.?\d)
如果不需要匹配可选-
前面的,去掉就可以了。
请参阅regex demo
详细信息
-
-?
- 可选的连字符 -
(?<!\d)(?<!\d\.)
- 紧靠左侧,不应有数字或数字+.
-
\d*
- 0+ 位数字 -
\.?
- 可选点 -
\d+
- 1+ 位数字 -
(?!\.?\d)
- 紧靠右边,不能有数字或.
+ 数字。
在 Java 中,使用:
Pattern pattern = Pattern.compile("-?(?<!\\d)(?<!\\d\\.)\\d*\\.?\\d+(?!\\.?\\d)");
关于java - 正则表达式从文件中检索双数字,但忽略具有多个点的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58186010/