zoukankan      html  css  js  c++  java
  • java实现关键字占位符

    转自:https://www.jb51.net/article/198116.htm

    python中的关键字占位符非常好用,但java并没有提供,发现网上有人写了一个,还挺好用

    public class StringFormatUtil {
        private static final Pattern pattern = Pattern.compile("\{(.*?)\}");
        private static Matcher matcher;
    
        public static String stringFormat(String sourStr, Map<String, Object> param) {
            String targetStr = sourStr;
            if (param == null)
                return targetStr;
            try {
                matcher = pattern.matcher(targetStr);
                while (matcher.find()) {
                    String key = matcher.group();
                    String keyclone = key.substring(1, key.length() - 1).trim();
                    Object value = param.get(keyclone);
                    if (value != null)
                        targetStr = targetStr.replace(key, value.toString());
                }
            }catch (Exception e){
                e.printStackTrace();
            }
            return targetStr;
        }
    
        public static String stringFormat(String sourStr, Object obj) {
            String targetStr = sourStr;
            matcher = pattern.matcher(targetStr);
            if (obj == null)
                return targetStr;
    
            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)
                        targetStr = targetStr.replace(key, value.toString());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return targetStr;
        }
    
        public static void main(String[] args) {
            String template="select {column} from {table} " +
                    "where tenant_code='{tenant_code}' " +
                    "and bizmonth='{month}' " +
                    "and bizyear='{month}'";
            Map<String, Object> map = new HashMap<>();
            map.put("column","a,b,c");
            map.put("table","tableName");
            map.put("tenant_code","0385");
            map.put("month","2021-09");
            String s = stringFormat(template, map);
            System.out.println(s);
        }
    }
  • 相关阅读:
    MySQL学习笔记:coalesce
    Oracle学习笔记:decode函数
    MySQL学习笔记:like和regexp的区别
    状态图
    构件图和部署图
    java基础知识(一)
    包图
    活动图
    协作图
    序列图
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/14926648.html
Copyright © 2011-2022 走看看