我有以下一段代码。我使用Case-insensitve模式修饰符,因此它会发现任何事件,但我想要的是替换为与模式匹配的字符,保留大小写。我怎么能解决这个问题?
String str = "Ten tender tEens";
String substr = "te";
str = str.replaceAll("(?i)"+substr, "("+substr+")");
System.out.println( str );
所需的输出: (Te)n(te)nder(tE)ens
收到的输出: (te)n(te)nder(te)ens
答案 0 :(得分:1)
你必须使用
str = str.replaceAll("(?i)("+substr+"?)", "($1)");
这将创建一个组并替换该组。
答案 1 :(得分:1)
您需要使用捕获组。
str = str.replaceAll("(?i)("+substr+")", "($1)");
答案 2 :(得分:1)
replaceAll()
与matcher(string).replaceAll(exp)
的工作方式相同:
为了使这项工作更好地理解你可以打破代码:
String str = "Ten tender tEens";
Pattern pattern=Pattern.compile("(?i)(te)");
Matcher matcher=pattern.matcher(str);
System.out.println( matcher.replaceAll("$1"));
结合这些步骤,你可以使用(做同样的):
String substr = "te";
str = str.replaceAll("(?i)("+substr+")", "($1)");