java正则表达式查找和替换

标签 java regex

我正在尝试在输入中查找环境变量并将其替换为值。

环境变量的模式是${\\.}

Pattern myPattern = Pattern.compile( "(${\\.})" );
String line ="${env1}sojods${env2}${env3}";

如何将 env1 替换为 1 并将 env2 替换为 2env3 使用 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/

相关文章:

Java类,试图创建一个找到初始值的方法

java - 如何模拟抽象类方法?

regex - IBAN 正则表达式设计

Javascript : Insane boolean test with '!' operator

python - 如何使用 python 检查字符串是否符合某些特定的 ABNF 规则?

java - 运行时错误。 java 。创建一个类 Sort,按升序显示四个整数

java - 以编程方式连接到 chromecast 路由 : do I need a permission?

java - 从脚本调用 javascript 解释器

Java:从显示 ArrayList 的 Stringbuffer 中删除括号和逗号

java - 拆分重复文本而不使用分隔符?