格式化消息,参数化替换 {} 占位符

MessageUtils.java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 消息工具类
 */
public class MessageUtils {

    public static void main(String[] args) {
        System.out.println(formatMessage("{}是 {} 年 {} 月 {} 日 星期{} 平均气温 {}°,办公室人数 {}", "今天", 2023, "09", "06", "三", 34.5, null));
    }

    /**
     * 格式化消息,参数化替换 {} 占位符
     *
     * @param message 消息内容
     * @param values  消息内容替换参数,用于替换消息内容中的 {} 占位符
     * @return
     */
    public static String formatMessage(String message, Object... values) {
        message = message instanceof String ? message : "";
        if (!message.contains("{}")) {
            return message;
        }
        int count = (message.length() - message.replace("{}", "").length()) / 2;
        if (values.length > count) {
            throw new RuntimeException("参数长度大于 {} 占位符的数量,请调整参数长度或 message 内容");
        }
        List<Object> list = new ArrayList<>();
        Arrays.stream(values).forEach(v -> list.add(v));
        int index = message.indexOf("{}");
        StringBuilder sb = new StringBuilder();
        int i = 0;
        while (index >= 0 && i < list.size()) {
            String prefix = message.substring(0, index);
            sb.append(prefix).append(list.get(i));
            message = message.substring(index + 2);
            index = message.indexOf("{}");
            i++;
        }
        sb.append(message);
        return sb.toString();
    }

}

 

main 函数打印内容:

今天是 2023 年 09 月 06 日 星期三 平均气温 34.5°,办公室人数 null

 

posted @ 2023-09-06 14:33  Nihaorz  阅读(42)  评论(0)    收藏  举报