正则表达式 - Java 字符串中{ }占位符替换方面的问题

 明月思含含 发布于 2022-10-25 17:49

怎么使用map中的key,替换字符串中{}中的占位符? 代码如下,请大神赐教……

     String str = "我是{name},我来自{city},今年{age}岁";
        Map mapstring = new HashMap();
        mapstring.put("name", "小明");
        mapstring.put("age", "15");
        mapstring.put("city", "北京");        
        
        ……………………
        
        System.out.println("我是小明,我来自北京,今年15岁");
3 个回答
  • 呵呵 我给你一个我封装好的工具类
    /**

    • 字符串格式化

    • @author Du

    • */

    public class DFormat {

    private static final Pattern pattern = Pattern.compile("\\{(.*?)\\}");
    private static Matcher matcher;
    
    /**
     * 格式化字符串 字符串中使用{key}表示占位符
     * 
     * @param sourStr
     *            需要匹配的字符串
     * @param param
     *            参数集
     * @return
     */
    public static String stringFormat(String sourStr, Map<String, Object> param) {
        String tagerStr = sourStr;
        if (param == null)
            return tagerStr;
        matcher = pattern.matcher(tagerStr);
        while (matcher.find()) {
            String key = matcher.group();
            String keyclone = key.substring(1, key.length() - 1).trim();
            Object value = param.get(keyclone);
            if (value != null)
                tagerStr = tagerStr.replace(key, value.toString());
        }
        return tagerStr;
    }
    
    /**
     * 格式化字符串 字符串中使用{key}表示占位符 利用反射 自动获取对象属性值 (必须有get方法)
     * 
     * @param sourStr
     *            需要匹配的字符串
     * @param param
     *            参数集
     * @return
     */
    public static String stringFormat(String sourStr, Object obj) {
        String tagerStr = sourStr;
        matcher = pattern.matcher(tagerStr);
        if (obj == null)
            return tagerStr;
    
        PropertyDescriptor pd;
        Method getMethod;
        // 匹配{}中间的内容 包括括号
        while (matcher.find()) {
            String key = matcher.group();
            String keyclone = key.substring(1, key.length() - 1).trim();
            try {
                pd = new PropertyDescriptor(keyclone, obj.getClass());
                getMethod = pd.getReadMethod();// 获得get方法
                Object value = getMethod.invoke(obj);
                if (value != null)
                    tagerStr = tagerStr.replace(key, value.toString());
            } catch (Exception e) {
                // TODO Auto-generated catch block
                // Loggers.addException(e);
            }
        }
        return tagerStr;
    }
    
    /**
     * 格式化字符串 (替换所有) 字符串中使用{key}表示占位符
     * 
     * @param sourStr
     *            需要匹配的字符串
     * @param param
     *            参数集
     * @return
     */
    public static String stringFormatAll(String sourStr, Map<String, Object> param) {
        String tagerStr = sourStr;
        if (param == null)
            return tagerStr;
        matcher = pattern.matcher(tagerStr);
        while (matcher.find()) {
            String key = matcher.group();
            String keyclone = key.substring(1, key.length() - 1).trim();
            Object value = param.get(keyclone);
            if (value != null)
                tagerStr = tagerStr.replace(key, value.toString());
        }
        return tagerStr;
    }

    }

    2022-10-26 23:34 回答
  • 刚写完答案 ,楼上正解
    String a = "我是{name},我来自{city},今年{age}岁";

        Map<String, String> mapstring = new HashMap<String, String>();
        mapstring.put("name", "小明");
        mapstring.put("age", "15");
        mapstring.put("city", "北京"); 
        if(!mapstring.isEmpty()&&mapstring!=null){
            for (Map.Entry<String, String> entry : mapstring.entrySet()) {
                a = a.replace("{"+entry.getKey()+"}", entry.getValue());
            }
        }
    2022-10-26 23:35 回答
  • 不太清楚为什么有这样的需求, 不过下面的代码应该满足需求:

    public class Test {
    
        public static void main(String[] args) throws Exception {
            String str = "我是{name},我来自{city},今年{age}岁";
            Map<String, String> mapstring = new HashMap<>();
            mapstring.put("name", "小明");
            mapstring.put("age", "15");
            mapstring.put("city", "北京");
    
            for (Map.Entry<String, String> entry : mapstring.entrySet()) {
                str = str.replace("{" + entry.getKey() + "}", entry.getValue());
            }
    
            System.out.println("我是小明,我来自北京,今年15岁");
            System.out.println(str);
        }
    }
    2022-10-26 23:35 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有