Java 字符串中{ }占位符替换方面的问题
三叔
三叔 2016-11-30 10:07:23
0
3
3066

怎么使用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 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 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; }

}



    学霸

    刚写完答案 ,楼上正解String a = "我是{name},我来自{city},今年{age}岁";

    Map mapstring = new HashMap(); mapstring.put("name", "小明"); mapstring.put("age", "15"); mapstring.put("city", "北京"); if(!mapstring.isEmpty()&&mapstring!=null){ for (Map.Entry entry : mapstring.entrySet()) { a = a.replace("{"+entry.getKey()+"}", entry.getValue()); } }


      小葫芦

      不太清楚为什么有这样的需求, 不过下面的代码应该满足需求:

      public class Test { public static void main(String[] args) throws Exception { String str = "我是{name},我来自{city},今年{age}岁"; Map mapstring = new HashMap<>(); mapstring.put("name", "小明"); mapstring.put("age", "15"); mapstring.put("city", "北京"); for (Map.Entry entry : mapstring.entrySet()) { str = str.replace("{" + entry.getKey() + "}", entry.getValue()); } System.out.println("我是小明,我来自北京,今年15岁"); System.out.println(str); } }


        最新下载
        更多>
        网站特效
        网站源码
        网站素材
        前端模板
        关于我们 免责声明 Sitemap
        PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!