使用此代码:
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.List;
import java.util.stream.Collectors;
public class Replace
{
public static void main(String args[]){
Map<String , String> map = new HashMap<String , String>();
map.put("eleven", "11");
String str = "replace the 11";
List<String> ls = Arrays.asList(str.split(" "));
ls.stream().map(m -> map.entrySet().forEach(e -> m.replaceAll(m , e.getKey())));
}
}
我试图取代&#34; 11&#34;在String str中使用&#34;十一&#34;。因此str应转换为&#34;替换11&#34;。
但我收到编译错误:
Multiple markers at this line
- Type mismatch: cannot convert from Stream<Object> to
<unknown>
- Cannot return a void result
如何替换地图中与字符串值匹配的键的出现?
答案 0 :(得分:1)
您的地图已回到正面 - 键应为数字:
Map<String , String> map = new HashMap<String , String>();
map.put("11", "eleven"); // etc
然后是一个班轮:
str = Arrays.stream(str.split(" "))
.map(s -> map.getOrDefault(s, s))
.collect(Collectors.joining(" "));
因为这段代码在分割上只消耗了1个空格,并且在连接上恰好放回了一个空格,所以保留了单词之间可变数量的空格。
这里有一些测试代码可以显示:
Map<String , String> map = new HashMap<>();
map.put("11", "eleven"); // etc
String str = "one two three 11 foo";
str = Arrays.stream(str.split(" "))
.map(s -> map.getOrDefault(s, s))
.collect(Collectors.joining(" "));
System.out.println(str);
输出:
one two three eleven foo
请参阅此代码正在运行here。