Java 如何实施";取代;在爪哇
replacement()对字符串进行变量替换。它扫描字符串,查找{}大括号中包含的表达式。如果找到表达式,请将其用作对象上的键,如果该键有字符串值或数值,则将其替换为大括号表达式并重复 更具体地说,我想做一些事情,比如:Java 如何实施";取代;在爪哇,java,regex,substitution,Java,Regex,Substitution,replacement()对字符串进行变量替换。它扫描字符串,查找{}大括号中包含的表达式。如果找到表达式,请将其用作对象上的键,如果该键有字符串值或数值,则将其替换为大括号表达式并重复 更具体地说,我想做一些事情,比如: public static String supplant(CharSequence message, Map<String,Object> params) 公共静态字符串替换(CharSequence消息,映射参数) 我试图使用像\{([\w]*)\}这样的
public static String supplant(CharSequence message, Map<String,Object> params)
公共静态字符串替换(CharSequence消息,映射参数)
我试图使用像\{([\w]*)\}这样的正则表达式来捕获变量,然后查找映射并替换,但我无法编写匹配的正则表达式
您将如何在java中实现replacement()?Java已经有了将变量替换为字符串的内置方法 见:
preg\u replace\u回调
函数,或Perl的/e
和/ee
修饰符。Java没有类似的东西,但它提供了API,让您自己实现它。下面是一个例子:
import java.util.*;
import java.util.regex.*;
public class Test
{
public static void main(String[] args) throws Exception
{
String s = "Lorem ipsum {foo} impedit civibus ei pri, legimus\n" +
"antiopam no {marco}, quo id everti forensibus maiestatis.";
Map<String,Object> p = new HashMap<String,Object>()
{{
put("foo", "BAR");
put("marco", "POLO!");
}};
System.out.printf("%s%n%n%s%n", s, supplant(s, p));
}
public static CharSequence supplant(CharSequence message, Map<String,Object> params)
{
Matcher m = Pattern.compile("\\{(\\w+)\\}").matcher(message);
StringBuffer sb = new StringBuffer();
while (m.find())
{
m.appendReplacement(sb, "");
String key = m.group(1);
sb.append(params.get(key).toString());
}
m.appendTail(sb);
return sb.toString();
}
}
import java.util.*;
导入java.util.regex.*;
公开课考试
{
公共静态void main(字符串[]args)引发异常
{
字符串s=“Lorem ipsum{foo}妨碍civibus ei pri,legimus\n”+
“安蒂奥帕姆不{marco},我是埃弗蒂法医。”;
Map p=newhashmap()
{{
put(“foo”、“BAR”);
放(“马可”,“波罗!”);
}};
System.out.printf(“%s%n%n%s%n”,s,替换项(s,p));
}
公共静态CharSequence替换(CharSequence消息,映射参数)
{
Matcher m=Pattern.compile(“\\{(\\w+\\\}”).Matcher(消息);
StringBuffer sb=新的StringBuffer();
while(m.find())
{
m、 (b)以“”号填列;
字符串键=m.group(1);
sb.append(params.get(key.toString());
}
m、 (某人);
使某人返回字符串();
}
}
显然,此代码省略了一些基本组件(主要是异常处理),但它演示了此技术的要点:
group(1)
访问它appendReplacement(sb,”)
附加上一个匹配(如果有)和当前匹配之间出现的任何文本append()
方法将其追加。(您可以通过将替换字符串作为第二个参数传递给appendReplacement()
,将步骤2和步骤3结合在一起,但是您必须注意字符串中的美元符号和反斜杠,它们会受到特殊处理。这种方法简单得多。)appendTail(sb)
追加上次匹配后剩余的内容