我正在尝试在输入中查找环境变量并将其替换为值。
环境变量的模式是${\\.}
Pattern myPattern = Pattern.compile( "(${\\.})" );
String line ="${env1}sojods${env2}${env3}";
如何将 env1
替换为 1
并将 env2
替换为 2
和 env3
使用 3
,所以
之后我会有一个新的字符串 1sojods23
?
最佳答案
Java 中的字符串是不可变的,如果您谈论的是任意数量的需要查找和替换的东西,这就有些棘手了。
具体来说,您需要在 Map
中定义替换,使用 StringBuilder
(在 Java 9 之前,应该使用性能较低的 StringBuffer
) 以及 Matcher
中的 appendReplacements()
和 appendTail()
方法。最终结果将存储在您的 StringBuilder
(或 StringBuffer
)中。
Map<String, String> replacements = new HashMap<String, String>() {{
put("${env1}", "1");
put("${env2}", "2");
put("${env3}", "3");
}};
String line ="${env1}sojods${env2}${env3}";
String rx = "(\\$\\{[^}]+\\})";
StringBuilder sb = new StringBuilder(); //use StringBuffer before Java 9
Pattern p = Pattern.compile(rx);
Matcher m = p.matcher(line);
while (m.find())
{
// Avoids throwing a NullPointerException in the case that you
// Don't have a replacement defined in the map for the match
String repString = replacements.get(m.group(1));
if (repString != null)
m.appendReplacement(sb, repString);
}
m.appendTail(sb);
System.out.println(sb.toString());
输出:
1sojods23
关于java正则表达式查找和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9605716/