• 一个替换java字符串中${}或者{}等占位符的工具类


    /**
     * 一个替换java字符串中${}或者{}等占位符的工具类
     *
     * @date 2018/5/31
     */
    public class ParserUtils {
        /**
         * 将字符串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 ParserUtils.parse("${", "}", text, args);
        }
    
        public static String parse1(String text, Object... args) {
            return ParserUtils.parse("{", "}", text, args);
        }
    }

    上面这种比较复杂。我自己写了一个

    替换/user/{username}/{name} ------>/user/{}/{}的方法

    protected static String getChangedString(String str) {
            char[] chars = str.toCharArray();
            Boolean isAppend = true;
            StringBuffer stringBuffer = new StringBuffer();
            for (int i = 0; i < chars.length; i++) {
                char currentChar = chars[i];
                if (isAppend) {
                    if (currentChar == '{') {
                        isAppend = false;
                    }
                    stringBuffer.append(chars[i]);
                } else {
                    if (currentChar == '}') {
                        isAppend = true;
                        stringBuffer.append(chars[i]);
                    }
                }
            }
            return stringBuffer.toString();
        }
  • 相关阅读:
    精准测试
    git 管理
    git
    代码覆盖率测试
    vue 前端视频
    jenkins
    go学习资料
    4-4 求自定类型元素的平均
    4-3 简单求和
    4-2 多项式求值
  • 原文地址:https://www.cnblogs.com/xuerong/p/9120490.html
Copyright © 2020-2023  润新知