我的字符串是“I am new to Java (*)”
我的实际字符串是我是 Java 8 的新手,我将从我的 map 中获取一堆键,其中我需要提取此处不匹配的部分 8
我的最终 map 应该包含第一个字符串是键,值是不匹配的部分我将如何在java 8中做到这一点
Pattern p =Pattern.compile("I am new to Java (*)");
map= map.entrySet()
.stream()
.filter(p -> p.getKey().contains("Java")&&p.getKey().matches("I am new to Java (*)"))
.collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue()));
我正在使用下面的一个,但它坏了,有人可以建议吗?
我想要类似的东西
Map<String, String> result=map.entrySet().stream().filter(k-> k.getKey().matches(test) && k.getKey().contains(test))
.collect(Collectors.toMap(k->k.getKey(), ::p.matcher().group(1)));
我能够使用两张 map 来实现它
Map<String, String> result = new HashMap<>();
map.forEach((k,v)->{
if(k.contains(test)) {
while(p.matcher(k).find()) {
result.put(k, p.matcher(k).group(1));
}
}
});
但我希望它在一张 map 中
最佳答案
如果我理解正确(并稍微简化了你的示例):
String test = "I am new to Java 8 ";
String t = "I am new to Java (.*) ";
Map<String, String> map = new HashMap<>();
map.put(test, "value1");
map.put("some", "value2");
Map<String, String> result = map.entrySet()
.stream()
.filter(e -> !e.getKey().equals(e.getKey().replaceAll(t, "$1")))
.collect(Collectors.toMap(
e -> e.getKey().replaceAll(t, "$1"),
Entry::getValue));
关于java - 从字符串 java 8 中获取不匹配的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46609988/