Java匹配和替换
⽂章⽬录
⼀、appendReplacement和appendTail
这两个⽅法都是Matcher类的⽅法
appendReplacement⽅法:
public Matcher appendReplacement(StringBuilder sb,String replacement)
sb是⼀个StringBuffer,replacement待替换的字符串,这个⽅法会把匹配到的内容替换为replacement,并且把从上次替换的位置到这次替换位置之间的字符串也拿到,然后,加上这次替换后的结果⼀起追加到StringBuffer⾥(假如这次替换是第⼀次替换,那就是只追加开始位置替换后的字符串啦)。
appendTail⽅法:
public StringBuffer appendTail(StringBuffer sb)
sb是⼀个StringBuffer,这个⽅法是把最后⼀次匹配到内容之后的字符串追加到StringBuffer中。
两个⽅法⼀起使⽤就可以达到所有替换或者替换第⼀个
替换所有
public static void findAndReplace(){java replace方法
Pattern p = Patternpile("cat");
Matcher m = p.matcher("one cat two cats in the yard");
StringBuffer sb =new StringBuffer();
while(m.find()){
m.appendReplacement(sb,"dog");
}
m.appendTail(sb);
System.out.String());// one dog two dogs in the yard
}
替换第⼀个
public static void reFirst(){
Pattern p = Patternpile("cat");
Matcher m = p.matcher("one cat two cats in the yard");
StringBuffer sb =new StringBuffer();
if(m.find()){
m.appendReplacement(sb,"dog");
}
m.appendTail(sb);
System.out.String());// one dog two cats in the yard
}
⼆、练习题
模板引擎是指,定义⼀个字符串作为模板:Hello, ${name}! You are learning ${lang}!
其中,以${key}表⽰的是变量,也就是将要被替换的内容
当传⼊⼀个Map<String, String>给模板后,需要把对应的key替换为Map的value。
例如,传⼊Map为:{“name”: “Bob”,“lang”: “Java”}
然后,${name}被替换为Map对应的值"Bob”,${lang}被替换为Map对应的值"Java",最终输出的结果为:Hello, Bob! You are learning Java!
请编写⼀个简单的模板引擎,利⽤正则表达式实现这个功能。
public class Template {
final String template;
final Pattern pattern = Patternpile("\\$\\{(\\w+)\\}");
public Template(String template){
}
public String render(Map<String, Object> data){
Matcher m = pattern.matcher(template);
StringBuffer sb =new StringBuffer();
while(m.find()){
String value =(String) up(1),"xxx");
m.appendReplacement(sb, value);
}
m.appendTail(sb);
String();
}
public static void main(String[] args){
Template template =new Template("Hello, ${name}! You are learning ${lang}!");
Map<String, Object> map =new HashMap<>();
map.put("name","Bob");
System.out.der(map));
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。