使用正则表达式进行字符串操作



我有一个字符串

String s="my name is ${name}. My roll no is  ${rollno} "

我想使用一个方法执行字符串操作来更新namerollno

public void name(String name, String roll)
{
String new = s.replace(" ${name}", name).replace(" ${rollno}", roll);

}

我们是否可以使用其他一些方法来实现同样的效果,比如在第一个"$"之后使用regex进行更改,以及对另一个进行类似的更改?

您可以使用Matcher#appendReplacementMatcher#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演示。

最新更新