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);
        }
    }
  • 相关阅读:
    译码器(选择器)
    RAM搭建
    ALU运算
    Base64
    关于Singleton
    C# WinForm导出Excel
    windows phone 前台布局以及画刷Brush使用 北京
    点击控件出现下沉或者倾斜技巧。(是你的控件不在死板,) 北京
    Centos5.4+Nginx+mysql5+php5+Zend3.3.3详细安装教程(转载请注明formating编写)
    如何锻炼身体
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/14926648.html
Copyright © 2011-2022 走看看