国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

java字符串中${}或者{}等的占位符替換工具類

2024-07-14 08:43:10
字體:
來源:轉載
供稿:網友

正如標題所述,這是一個替換java字符串中${}或者{}等占位符的工具類,其處理性能比較令人滿意。該類主要通過簡單的改寫myatis框架中的GenericTokenParser類得到。在日常開發過程中,可以將該類進行簡單的改進或封裝,就可以用在需要打印日志的場景中,現在張貼出來給有需要的人,使用方式參考main方法,不再贅述!

public class Parser {  /**   * 將字符串text中由openToken和closeToken組成的占位符依次替換為args數組中的值   * @param openToken   * @param closeToken   * @param text   * @param args   * @return   */  public static String parse(String openToken, String closeToken, String text, Object... args) {    if (args == null || args.length <= 0) {      return text;    }    int argsIndex = 0;    if (text == null || text.isEmpty()) {      return "";    }    char[] src = text.toCharArray();    int offset = 0;    // search open token    int start = text.indexOf(openToken, offset);    if (start == -1) {      return text;    }    final StringBuilder builder = new StringBuilder();    StringBuilder expression = null;    while (start > -1) {      if (start > 0 && src[start - 1] == '//') {        // this open token is escaped. remove the backslash and continue.        builder.append(src, offset, start - offset - 1).append(openToken);        offset = start + openToken.length();      } else {        // found open token. let's search close token.        if (expression == null) {          expression = new StringBuilder();        } else {          expression.setLength(0);        }        builder.append(src, offset, start - offset);        offset = start + openToken.length();        int end = text.indexOf(closeToken, offset);        while (end > -1) {          if (end > offset && src[end - 1] == '//') {            // this close token is escaped. remove the backslash and continue.            expression.append(src, offset, end - offset - 1).append(closeToken);            offset = end + closeToken.length();            end = text.indexOf(closeToken, offset);          } else {            expression.append(src, offset, end - offset);            offset = end + closeToken.length();            break;          }        }        if (end == -1) {          // close token was not found.          builder.append(src, start, src.length - start);          offset = src.length;        } else {          ///////////////////////////////////////僅僅修改了該else分支下的個別行代碼////////////////////////          String value = (argsIndex <= args.length - 1) ?              (args[argsIndex] == null ? "" : args[argsIndex].toString()) : expression.toString();          builder.append(value);          offset = end + closeToken.length();          argsIndex++;          ////////////////////////////////////////////////////////////////////////////////////////////////        }      }      start = text.indexOf(openToken, offset);    }    if (offset < src.length) {      builder.append(src, offset, src.length - offset);    }    return builder.toString();  }  public static String parse0(String text, Object... args) {    return Parser.parse("${", "}", text, args);  }  public static String parse1(String text, Object... args) {    return Parser.parse("{", "}", text, args);  }  /**   * 使用示例   * @param args   */  public static void main(String... args) {    //{}被轉義,不會被替換    System.out.println(Parser.parse("{", "}", "我的名字是//{},結果是{},可信度是%{}", "雷鋒", true, 100));    System.out.println(Parser.parse0("我的名字是${},結果是${},可信度是%${}", "雷鋒", true, 100));    System.out.println(Parser.parse1("我的名字是{},結果是{},可信度是%{}", "雷鋒", true, 100));//    輸出結果如下://    我的名字是{},結果是true,可信度是%100//    我的名字是雷鋒,結果是true,可信度是%100//    我的名字是雷鋒,結果是true,可信度是%100  }}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宕昌县| 河西区| 清徐县| 乐平市| 衡山县| 舞钢市| 武清区| 泰宁县| 顺义区| 乳山市| 正定县| 基隆市| 灵丘县| 澜沧| 东山县| 双柏县| 平凉市| 双峰县| 延吉市| 横峰县| 天祝| 桐乡市| 理塘县| 兴文县| 临夏县| 墨脱县| 镇康县| 油尖旺区| 大田县| 凯里市| 广州市| 颍上县| 林口县| 任丘市| 沐川县| 富川| 五常市| 平舆县| 黑水县| 册亨县| 石首市|