java实现占位符替换${},{}工具类

2022-06-14 11:15:30
publicclassParser{/**
   * 将字符串text中由openToken和closeToken组成的占位符依次替换为args数组中的值
   * @param openToken
   * @param closeToken
   * @param text
   * @param args
   * @return
   */publicstatic Stringparse(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 tokenint start= text.indexOf(openToken, offset);if(start==-1){return text;}final StringBuilder builder=newStringBuilder();
    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=newStringBuilder();}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{
 
          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();}publicstatic Stringparse0(String text, Object... args){return Parser.parse("${","}", text, args);}publicstatic Stringparse1(String text, Object... args){return Parser.parse("{","}", text, args);}}
  • 作者:sssuperMario
  • 原文链接:https://blog.csdn.net/qq_41958123/article/details/108164152
    更新时间:2022-06-14 11:15:30