diff --git a/hutool-core/src/main/java/cn/hutool/core/text/StrFormatter.java b/hutool-core/src/main/java/cn/hutool/core/text/StrFormatter.java index 13374cc63..cc5ec7cc5 100644 --- a/hutool-core/src/main/java/cn/hutool/core/text/StrFormatter.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/StrFormatter.java @@ -3,6 +3,8 @@ package cn.hutool.core.text; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; +import java.util.Map; + /** * 字符串格式化工具 * @@ -73,4 +75,34 @@ public class StrFormatter { return sbuf.toString(); } + + /** + * 格式化文本,使用 {varName} 占位
+ * map = {a: "aValue", b: "bValue"} format("{a} and {b}", map) ---=》 aValue and bValue + * + * @param template 文本模板,被替换的部分用 {key} 表示 + * @param map 参数值对 + * @param ignoreNull 是否忽略 {@code null} 值,忽略则 {@code null} 值对应的变量不被替换,否则替换为"" + * @return 格式化后的文本 + * @since 5.7.10 + */ + public static String format(CharSequence template, Map map, boolean ignoreNull) { + if (null == template) { + return null; + } + if (null == map || map.isEmpty()) { + return template.toString(); + } + + String template2 = template.toString(); + String value; + for (Map.Entry entry : map.entrySet()) { + value = StrUtil.utf8Str(entry.getValue()); + if (null == value && ignoreNull) { + continue; + } + template2 = StrUtil.replace(template2, "{" + entry.getKey() + "}", value); + } + return template2; + } } diff --git a/hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java index a4814874e..bcfcaa77c 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java @@ -2,6 +2,7 @@ package cn.hutool.core.util; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.StrBuilder; +import cn.hutool.core.text.StrFormatter; import cn.hutool.core.text.StrPool; import cn.hutool.core.text.TextSimilarity; @@ -454,22 +455,6 @@ public class StrUtil extends CharSequenceUtil implements StrPool { * @since 5.4.3 */ public static String format(CharSequence template, Map map, boolean ignoreNull) { - if (null == template) { - return null; - } - if (null == map || map.isEmpty()) { - return template.toString(); - } - - String template2 = template.toString(); - String value; - for (Map.Entry entry : map.entrySet()) { - value = utf8Str(entry.getValue()); - if (null == value && ignoreNull) { - continue; - } - template2 = replace(template2, "{" + entry.getKey() + "}", value); - } - return template2; + return StrFormatter.format(template, map, ignoreNull); } } diff --git a/hutool-extra/src/main/java/cn/hutool/extra/qrcode/QrConfig.java b/hutool-extra/src/main/java/cn/hutool/extra/qrcode/QrConfig.java index 27b10eeae..f9aae03e7 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/qrcode/QrConfig.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/qrcode/QrConfig.java @@ -14,7 +14,7 @@ import java.util.HashMap; /** * 二维码设置 - * + * * @author looly * @since 4.1.2 */ @@ -33,7 +33,7 @@ public class QrConfig { protected Integer backColor = WHITE; /** 边距1~4 */ protected Integer margin = 2; - /** 设置二维码中的信息量,可设置1-40的整数 */ + /** 设置二维码中的信息量,可设置0-40的整数 */ protected Integer qrVersion; /** 纠错级别 */ protected ErrorCorrectionLevel errorCorrection = ErrorCorrectionLevel.M; @@ -43,7 +43,7 @@ public class QrConfig { protected Image img; /** 二维码中的Logo缩放的比例系数,如5表示长宽最小值的1/5 */ protected int ratio = 6; - + /** * 创建QrConfig * @return QrConfig @@ -62,7 +62,7 @@ public class QrConfig { /** * 构造 - * + * * @param width 宽 * @param height 长 */ @@ -73,7 +73,7 @@ public class QrConfig { /** * 获取宽度 - * + * * @return 宽度 */ public int getWidth() { @@ -82,7 +82,7 @@ public class QrConfig { /** * 设置宽度 - * + * * @param width 宽度 * @return this */ @@ -93,7 +93,7 @@ public class QrConfig { /** * 获取高度 - * + * * @return 高度 */ public int getHeight() { @@ -102,7 +102,7 @@ public class QrConfig { /** * 设置高度 - * + * * @param height 高度 * @return this; */ @@ -113,7 +113,7 @@ public class QrConfig { /** * 获取前景色 - * + * * @return 前景色 */ public int getForeColor() { @@ -122,7 +122,7 @@ public class QrConfig { /** * 设置前景色,例如:Color.BLUE.getRGB() - * + * * @param foreColor 前景色 * @return this * @deprecated 请使用 {@link #setForeColor(Color)} @@ -149,7 +149,7 @@ public class QrConfig { /** * 获取背景色 - * + * * @return 背景色 */ public int getBackColor() { @@ -158,7 +158,7 @@ public class QrConfig { /** * 设置背景色,例如:Color.BLUE.getRGB() - * + * * @param backColor 背景色 * @return this * @deprecated 请使用 {@link #setBackColor(Color)} @@ -187,7 +187,7 @@ public class QrConfig { /** * 获取边距 - * + * * @return 边距 */ public Integer getMargin() { @@ -196,7 +196,7 @@ public class QrConfig { /** * 设置边距 - * + * * @param margin 边距 * @return this */ @@ -227,7 +227,7 @@ public class QrConfig { /** * 获取纠错级别 - * + * * @return 纠错级别 */ public ErrorCorrectionLevel getErrorCorrection() { @@ -236,7 +236,7 @@ public class QrConfig { /** * 设置纠错级别 - * + * * @param errorCorrection 纠错级别 * @return this */ @@ -247,7 +247,7 @@ public class QrConfig { /** * 获取编码 - * + * * @return 编码 */ public Charset getCharset() { @@ -256,7 +256,7 @@ public class QrConfig { /** * 设置编码 - * + * * @param charset 编码 * @return this */ @@ -267,26 +267,26 @@ public class QrConfig { /** * 获取二维码中的Logo - * + * * @return Logo图片 */ public Image getImg() { return img; } - + /** * 设置二维码中的Logo文件 - * + * * @param imgPath 二维码中的Logo路径 * @return this; */ public QrConfig setImg(String imgPath) { return setImg(FileUtil.file(imgPath)); } - + /** * 设置二维码中的Logo文件 - * + * * @param imgFile 二维码中的Logo * @return this; */ @@ -296,7 +296,7 @@ public class QrConfig { /** * 设置二维码中的Logo - * + * * @param img 二维码中的Logo * @return this; */ @@ -307,7 +307,7 @@ public class QrConfig { /** * 获取二维码中的Logo缩放的比例系数,如5表示长宽最小值的1/5 - * + * * @return 二维码中的Logo缩放的比例系数,如5表示长宽最小值的1/5 */ public int getRatio() { @@ -316,7 +316,7 @@ public class QrConfig { /** * 设置二维码中的Logo缩放的比例系数,如5表示长宽最小值的1/5 - * + * * @param ratio 二维码中的Logo缩放的比例系数,如5表示长宽最小值的1/5 * @return this; */ @@ -327,7 +327,7 @@ public class QrConfig { /** * 转换为Zxing的二维码配置 - * + * * @return 配置 */ public HashMap toHints() {