Jav*_*ide 2 java regex java-stream
使用 Java 11 我想知道如何使用 Stream API 将所有组匹配提取到单行中的字符串列表中。
鉴于此正则表达式和字符串:
String regexp = "(\\d\\d\\d)-(\\d)-(\\d\\d)";
String str = "123-8-90";
Run Code Online (Sandbox Code Playgroud)
我知道如何在多行中获得结果:
Pattern pattern = Pattern.compile(regexp);
Matcher matcher = pattern.matcher(str);
List<String> matches = new ArrayList<>();
if (matcher.find()) {
matches.add(matcher.group(1));
matches.add(matcher.group(2));
matches.add(matcher.group(3));
}
System.out.println(matches);
Run Code Online (Sandbox Code Playgroud)
这将打印 3 个不同数字字符串的预期列表: [123, 8, 90]
我试图在一个班轮中实现相同的目标:
List<String> matches = Pattern.compile(regexp)
.matcher(str)
.results()
.map(MatchResult::group)
.collect(Collectors.toList());
System.out.println(matches);
Run Code Online (Sandbox Code Playgroud)
这会打印出意外:[123-8-90]
如何在流中使用 MatchResult::group(int) 方法?
你非常接近。您需要平面映射MatchResult#group:
List<String> matches = Pattern.compile(regexp)
.matcher(str)
.results()
.flatMap(mr -> IntStream.rangeClosed(1, mr.groupCount())
.mapToObj(mr::group))
.collect(Collectors.toList());
System.out.println(matches);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |