我试图从一条线,我在Java中使用新Stream
时获得一定弄出来的文字工作8正则表达式不流过滤器()
这是我正在读:
46 [core1]
56 [core1]
45 [core1]
45 [core2]
67 [core2]
54 [core2]
这里是我目前看它的代码:
Path path = Paths.get("./src/main/resources/", "data.txt");
try(Stream<String> lines = Files.lines(path)){
List<Integer> temps = new ArrayList<>();
lines
.filter(line -> line.contains("[core1]"))
.filter(line -> line.contains("(\\d+).*"))
.flatMapToInt(temperature -> IntStream.of(Integer.parseInt(temperature)))
.forEach(System.out::println);
System.out.print(temps.size());
}
我在https://www.regex101.com/检查正则表达式,它似乎很好地工作。 另外,如果我只是搜索[core1]
字符串,它会发现它。
问题是,当所有这一切使用时,我得到0匹配。 我目前的逻辑是我读了一行,看看它是什么核心,然后得到它的数字。之后我想将它添加到列表中。
我在这里做错了什么?
阅读contains()的javadoc:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#contains%28java.lang.CharSequence%29。它接受正则表达式吗? –
对此不作任何说明。支持强硬是合乎逻辑的。任何方式让这个工作在一些黑客风格? – Kaspar
我想你正在寻找'String#matches'而不是'contains' ......虽然你需要在调用'parseInt'之前从行中提取整数。通过用一个元素创建一个IntStream来调用'flatMapToInt'并不是很有用。只需使用'mapToInt'代替... –