正则表达式不适用于 Stream filter()
Regex not working with Stream filter()
我试图从我在 Java 8.
中使用新的 Stream
时得到的一行中获取某些文本
这是我正在阅读的内容:
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
仅适用于字符串(不支持正则表达式)...您可以使用 line.matches("(\d+).*")
来实现相同的目的。
我试图从我在 Java 8.
中使用新的Stream
时得到的一行中获取某些文本
这是我正在阅读的内容:
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
仅适用于字符串(不支持正则表达式)...您可以使用 line.matches("(\d+).*")
来实现相同的目的。