|
@@ -1,93 +0,0 @@
|
|
|
-package com.ruoyi.common.utils.text;
|
|
|
-
|
|
|
-import com.ruoyi.common.utils.StringUtils;
|
|
|
-
|
|
|
-/**
|
|
|
- * 字符串格式化
|
|
|
- *
|
|
|
- * @author ruoyi
|
|
|
- */
|
|
|
-public class StrFormatter
|
|
|
-{
|
|
|
- public static final String EMPTY_JSON = "{}";
|
|
|
- public static final char C_BACKSLASH = '\\';
|
|
|
- public static final char C_DELIM_START = '{';
|
|
|
- public static final char C_DELIM_END = '}';
|
|
|
-
|
|
|
- /**
|
|
|
- * 格式化字符串<br>
|
|
|
- * 此方法只是简单将占位符 {} 按照顺序替换为参数<br>
|
|
|
- * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可<br>
|
|
|
- * 例:<br>
|
|
|
- * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b<br>
|
|
|
- * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a<br>
|
|
|
- * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b<br>
|
|
|
- *
|
|
|
- * @param strPattern 字符串模板
|
|
|
- * @param argArray 参数列表
|
|
|
- * @return 结果
|
|
|
- */
|
|
|
- public static String format(final String strPattern, final Object... argArray)
|
|
|
- {
|
|
|
- if (StringUtils.isEmpty(strPattern) || StringUtils.isEmpty(argArray))
|
|
|
- {
|
|
|
- return strPattern;
|
|
|
- }
|
|
|
- final int strPatternLength = strPattern.length();
|
|
|
-
|
|
|
- // 初始化定义好的长度以获得更好的性能
|
|
|
- StringBuilder sbuf = new StringBuilder(strPatternLength + 50);
|
|
|
-
|
|
|
- int handledPosition = 0;
|
|
|
- int delimIndex;// 占位符所在位置
|
|
|
- for (int argIndex = 0; argIndex < argArray.length; argIndex++)
|
|
|
- {
|
|
|
- delimIndex = strPattern.indexOf(EMPTY_JSON, handledPosition);
|
|
|
- if (delimIndex == -1)
|
|
|
- {
|
|
|
- if (handledPosition == 0)
|
|
|
- {
|
|
|
- return strPattern;
|
|
|
- }
|
|
|
- else
|
|
|
- { // 字符串模板剩余部分不再包含占位符,加入剩余部分后返回结果
|
|
|
- sbuf.append(strPattern, handledPosition, strPatternLength);
|
|
|
- return sbuf.toString();
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- if (delimIndex > 0 && strPattern.charAt(delimIndex - 1) == C_BACKSLASH)
|
|
|
- {
|
|
|
- if (delimIndex > 1 && strPattern.charAt(delimIndex - 2) == C_BACKSLASH)
|
|
|
- {
|
|
|
- // 转义符之前还有一个转义符,占位符依旧有效
|
|
|
- sbuf.append(strPattern, handledPosition, delimIndex - 1);
|
|
|
- sbuf.append(Convert.utf8Str(argArray[argIndex]));
|
|
|
- handledPosition = delimIndex + 2;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- // 占位符被转义
|
|
|
- argIndex--;
|
|
|
- sbuf.append(strPattern, handledPosition, delimIndex - 1);
|
|
|
- sbuf.append(C_DELIM_START);
|
|
|
- handledPosition = delimIndex + 1;
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- // 正常占位符
|
|
|
- sbuf.append(strPattern, handledPosition, delimIndex);
|
|
|
- sbuf.append(Convert.utf8Str(argArray[argIndex]));
|
|
|
- handledPosition = delimIndex + 2;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- // append the characters following the last {} pair.
|
|
|
- // 加入最后一个占位符后所有的字符
|
|
|
- sbuf.append(strPattern, handledPosition, strPattern.length());
|
|
|
-
|
|
|
- return sbuf.toString();
|
|
|
- }
|
|
|
-}
|