Discuss / Java / 练习答案

练习答案

Topic source

雨鸢梦

#1 Created at ... [Delete] [Delete and Lock User]

第一个方法是我一开始的想法,这个想法明显使用笨办法,而且只适用于固定的情况,这里发出来看一看就行

package RegularExpression;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class demo2 {
    public static void main(String[] args) {
        StringBuffer sb =  new StringBuffer();
        StringBuffer sb1 = new StringBuffer();
        Map<String,String> map = new HashMap<>();
        map.put("name","zhang");
        map.put("lang","math");

        String s = "Hello, ${name}! You are learning ${lang}!";

        for(String key:map.keySet()){
            if(key.equals("name")){
                Pattern p1 = Pattern.compile("\\{name\\}");
                Matcher m1 = p1.matcher(s);
                while(m1.find()){
                    m1.appendReplacement(sb,map.get(key));
                }
                m1.appendTail(sb);
            }
            if(key.equals("lang")){
                Pattern p2 = Pattern.compile("\\{lang\\}");
                Matcher m2 = p2.matcher(sb.toString());
                while(m2.find()){
                    m2.appendReplacement(sb1,map.get(key));
                }
                m2.appendTail(sb1);
            }
        }
        System.out.println(sb1.toString());
    }
}

然后是第二种方法,是在第一种方法的基础上改进的

package RegularExpression;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class demo2 {
    public static void main(String[] args) {
        Map<String,String> map = new HashMap<>();
        map.put("name","zhang");
        map.put("lang","math");

        String s = "Hello, ${name}! You are learning ${lang}!";

        for(String key:map.keySet()){
            Pattern p = Pattern.compile("\\{"+key+"\\}");
            Matcher m = p.matcher(s);
            StringBuffer sb =  new StringBuffer();
            while(m.find()){
                m.appendReplacement(sb,map.get(key));
            }
            m.appendTail(sb);
            s = sb.toString();
        }
        System.out.println(s);
    }
}

这里的思路也是将字符串中的{name}和{lang}分别提出来,在不同的循环中各替换一次

方法二的思路是直接用key作为区分了,不像方法一里面写两个if语句

然后还有一点,替换{lang}的时候,不应该还用最开始的字符串s,这样的话一开始的{name}就等于没替换。所以要用{name}替换后的字符串,放入

Matcher m = p.matcher(s);

这里的做法是将替换{name}后的字符串作为变量s指向的新字符串


  • 1

Reply