免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
java如何替換word中${}中的內(nèi)容?

處理Word可以使用poi,
如何替換使用下面三個(gè)類(lèi)就好了。

public class GenericTokenParser {    private final String       openToken;    private final String       closeToken;    private final TokenHandler handler;    public GenericTokenParser(String openToken, String closeToken, TokenHandler handler) {        this.openToken = openToken;        this.closeToken = closeToken;        this.handler = handler;    }    // 主要的邏輯就是取出expression,委托TokenHandler來(lái)替換expression。    public String parse(String text) {        if (text == null || text.isEmpty()) {            return "";        }        // search open token        int start = text.indexOf(openToken, 0);        if (start == -1) {            return text;        }        char[] src = text.toCharArray();        int offset = 0;        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 {                    builder.append(handler.handleToken(expression.toString()));                    offset = end + closeToken.length();                }            }            start = text.indexOf(openToken, offset);        }        if (offset < src.length) {            builder.append(src, offset, src.length - offset);        }        return builder.toString();    }}
public class VariableTokenHandler implements TokenHandler {        private final Properties variables;        private final boolean    enableDefaultValue;        private final String     defaultValueSeparator;        public VariableTokenHandler(Properties variables) {            this.variables = variables;            this.enableDefaultValue = false;            this.defaultValueSeparator = ":";        }        private String getPropertyValue(String key, String defaultValue) {            return (variables == null) ? defaultValue : variables.getProperty(key, defaultValue);        }        @Override        public String handleToken(String content) {            if (variables != null) {                String key = content;                if (enableDefaultValue) {                    final int separatorIndex = content.indexOf(defaultValueSeparator);                    String defaultValue = null;                    if (separatorIndex >= 0) {                        key = content.substring(0, separatorIndex);                        defaultValue = content.substring(separatorIndex + defaultValueSeparator.length());                    }                    if (defaultValue != null) {                         return variables.getProperty(key, defaultValue);                    }                }                if (variables.containsKey(key)) {                    return variables.getProperty(key);                }            }            return "${" + content + "}";         }    }
public interface TokenHandler {    String handleToken(String content);}

使用方法:

public class Main {    public static void main(String[] args) {        Properties properties = new Properties();        properties.put("name", "javaer");        VariableTokenHandler tokenHandler = new VariableTokenHandler(properties);        GenericTokenParser parser = new GenericTokenParser("${", "}", tokenHandler);        String parse = parser.parse("my name is ${name}");        System.out.println(parse);    }}

運(yùn)行結(jié)果:
Screen Shot 2017-12-26 at 11.43.29

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Mybatis的sql組裝詳解
Unity3D 中保存或讀取數(shù)組的方法
StringBuffer類(lèi)的使用方法
從0開(kāi)始搭建SpringCloud項(xiàng)目分布式日志架構(gòu)技術(shù)棧,絕了!
[翻譯]提高String和StringBuffer性能的技巧
The EAP Object Dictionary (subprofile 1000)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服