Java 字符串中{ }占位符替换方面的问题

发布于 2022-09-04 05:37:33 字数 406 浏览 11 评论 0

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

     String str = "我是{name},我来自{city},今年{age}岁";
        Map<String, String> mapstring = new HashMap<String, String>();
        mapstring.put("name", "小明");
        mapstring.put("age", "15");
        mapstring.put("city", "北京");        
        
        ……………………
        
        System.out.println("我是小明,我来自北京,今年15岁");

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

尘曦 2022-09-11 05:37:33

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

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-09-11 05:37:33

刚写完答案 ,楼上正解
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-09-11 05:37:33

呵呵 我给你一个我封装好的工具类
/**

  • 字符串格式化

  • @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-09-11 05:37:33

人家要的是匹配。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文