【发布时间】:2016-08-20 06:38:18
【问题描述】:
我正在探索正则表达式。
问题说明: 用替换映射中提供的值替换 # 和 # 之间的字符串。
import java.util.regex.*;
import java.util.*;
public class RegExTest {
public static void main(String args[]){
HashMap<String,String> replacements = new HashMap<String,String>();
replacements.put("OldString1","NewString1");
replacements.put("OldString2","NewString2");
replacements.put("OldString3","NewString3");
String source = "#OldString1##OldString2#_ABCDEF_#OldString3#";
Pattern pattern = Pattern.compile("\\#(.+?)\\#");
//Pattern pattern = Pattern.compile("\\#\\#");
Matcher matcher = pattern.matcher(source);
StringBuffer buffer = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(buffer, "");
buffer.append(replacements.get(matcher.group(1)));
}
matcher.appendTail(buffer);
System.out.println("OLD_String:"+source);
System.out.println("NEW_String:"+buffer.toString());
}
}
输出:(满足我的要求,但不知道谁 group(1) 命令起作用)
OLD_String:#OldString1##OldString2#_ABCDEF_#OldString3#
NEW_String:NewString1NewString2_ABCDEF_NewString3
如果我将代码更改如下
Pattern pattern = Pattern.compile("\\#(.+?)\\#");
与
Pattern pattern = Pattern.compile("\\#\\#");
我遇到以下错误:
Exception in thread "main" java.lang.IndexOutOfBoundsException: No group 1
我不明白两者之间的区别
"\\#(.+?)\\#" and `"\\#\\#"`
你能解释一下区别吗?
【问题讨论】: