【发布时间】:2014-06-22 07:35:29
【问题描述】:
如果我有一个String="#1 and #2",一个Map={"1":"a", "2":"b"},什么我打算做的是将#x 替换为Map(x) 评估的值,其结果应该是“a and b”。
我的代码如下:
Map<String, String> map = new HashMap<String, String>();
map.put("1", "a");
map.put("2", "b");
String s = "#1 and #2";
Pattern p = Pattern.compile("#(.*?)(\\s|$)");
Matcher m = p.matcher(s);
while(m.find()) {
s = m.replaceFirst(m.group(1));
System.out.println(s);
}
但是输出是无限的,比如:
1and #2
2and #2
2and #2
2and #2
...
...
谁能给我一个关于这个现象的解释,并给我一个正确的解决我的问题的方法?非常感谢!
【问题讨论】:
-
谢谢兄弟,这有帮助。但是你能解释一下为什么我的代码会以无限循环告终吗? @TheLostMind
-
正则表达式部分错误..您正在通过在匹配器上调用 replaceFirst 来替换 s。