0
点赞
收藏
分享

微信扫一扫

java 获取字符串占位符列表

一. 概述

二. 示例

示例占位符规则: ${param}

2.1 工具类

/**
     * 获取字符串里的占位符列表, 占位符样式 ${param}
     * @param content
     * @return
     */
    public static List<String> getPlaceholderList(String content){
        char[] textChars = content.toCharArray();
        StringBuilder textSofar = new StringBuilder();
        StringBuilder sb = new StringBuilder();
        // 存储占位符 位置信息集合
        List<String> placeholderList = new ArrayList<>();
        // 当前标识
        int modeTg = ignoreTg;
        for (int m = 0; m < textChars.length; m++) {
            char c = textChars[m];
            textSofar.append(c);
            switch (c) {
                case '$': {
                    modeTg = startTg;
                    sb.append(c);
                }
                break;
                case '{': {
                    if (modeTg == startTg) {
                        sb.append(c);
                        modeTg = readTg;
                    } else {
                        if (modeTg == readTg) {
                            sb = new StringBuilder();
                            modeTg = ignoreTg;
                        }
                    }
                }
                break;
                case '}': {
                    if (modeTg == readTg) {
                        modeTg = ignoreTg;
                        sb.append(c);
                        String str = sb.toString();
                        if (StringUtil.notEmpty(str)) {
                            placeholderList.add(str);
                            textSofar = new StringBuilder();
                        }
                        sb = new StringBuilder();
                    } else if (modeTg == startTg) {
                        modeTg = ignoreTg;
                        sb = new StringBuilder();
                    }
                }
                default: {
                    if (modeTg == readTg) {
                        sb.append(c);
                    } else if (modeTg == startTg) {
                        modeTg = ignoreTg;
                        sb = new StringBuilder();
                    }
                }
            }
        }
        return placeholderList;
    }

2.2 测试

public static void main(String[] args) {
        String content = "<p>\n" +
                "    第一段占位符: ${name1}\n" +
                "</p>\n" +
                "<p>\n" +
                "    第二段占位符: ${name2}\n" +
                "</p>";
        List<String> placeholderList = getPlaceholderList(content);
        placeholderList.forEach(System.out::println);
    }

打印

${name1}
${name2}
举报

相关推荐

0 条评论