一个简单的占位符替换实现

今天在看Guava的Preconditions这个类的源码的时候看到一个占位符替换的实现,我以前的想法都是replace,这个实现是跳过占位符...有点意思,这里记录下.或许以后用得到

    /**
     * 非常好的替换方法,核心逻辑就是搜索%s然后跳过...
     */
    public String format(String template,String[] args){
        StringBuilder builder = new StringBuilder(template.length() + 16 * args.length);
        int templateStart = 0;
        int i = 0;
        while (i < args.length) {
            // 获得下一个%s起始位
            int placeholderStart = template.indexOf("%s", templateStart);
            if (placeholderStart == -1) {
                break;
            }
            // 将上一个%s末尾与下一个%s起始位之间的内容写入builder
            builder.append(template, templateStart, placeholderStart);
            // 将参数写入builder
            builder.append(args[i++]);
            // 记录下一个截断起始位
            templateStart = placeholderStart + 2;
        }
        // 将最后一个%s之后的内容追加到builder内
        builder.append(template, templateStart, template.length());
        return builder.toString();
    }

只用了2个常见的api就实现了替换功能.以前从来没想到过这种思路,很新颖.

你可能感兴趣的:(一个简单的占位符替换实现)