我有一个字符串
String s="my name is ${name}. My roll no is ${rollno} "
我想使用一个方法执行字符串操作来更新name
和rollno
。
public void name(String name, String roll)
{
String new = s.replace(" ${name}", name).replace(" ${rollno}", roll);
}
我们是否可以使用其他一些方法来实现同样的效果,比如在第一个"$"
之后使用regex进行更改,以及对另一个进行类似的更改?
您可以使用Matcher#appendReplacement
或Matcher#replaceAll
(与Java 9+一起使用(:
更通用的版本:
String s="my name is ${name}. My roll no is ${rollno} ";
Matcher m = Pattern.compile("\$\{([^{}]+)\}").matcher(s);
Map<String,String> replacements = new HashMap();
replacements.put("name","John");
replacements.put("rollno","123");
StringBuffer replacedLine = new StringBuffer();
while (m.find()) {
if (replacements.get(m.group(1)) != null)
m.appendReplacement(replacedLine, replacements.get(m.group(1)));
else
m.appendReplacement(replacedLine, m.group());
}
m.appendTail(replacedLine);
System.out.println(replacedLine.toString());
// => my name is John. My roll no is 123
Java 9+解决方案:
Matcher m2 = Pattern.compile("\$\{([^{}]+)\}").matcher(s);
String result = m2.replaceAll(x ->
replacements.get(x.group(1)) != null ? replacements.get(x.group(1)) : x.group());
System.out.println( result );
// => my name is John. My roll no is 123
请参阅Java演示。
正则表达式为${([^{}]+)}
:
${
-一个${
字符序列([^{}]+)
-组1(m.group(1)
(:除{
和}
之外的任何一个或多个字符}
-一个}
字符
请参阅regex演示。