我正在学习正则表达式。
问题陈述: 用提供的替换映射中的值替换#和#之间的字符串。
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
我不理解“difference between”的区别
"\\#(.+?)\\#" and `"\\#\\#"`
你能解释一下它们的区别吗?