正如標(biāo)題所述,這是一個(gè)替換java字符串中${}或者{}等占位符的工具類,其處理性能比較令人滿意。該類主要通過簡單的改寫myatis框架中的GenericTokenParser類得到。在日常開發(fā)過程中,可以將該類進(jìn)行簡單的改進(jìn)或封裝,就可以用在需要打印日志的場景中,現(xiàn)在張貼出來給有需要的人,使用方式參考main方法,不再贅述!
肇州網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)公司成立與2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
public class Parser { /** * 將字符串text中由openToken和closeToken組成的占位符依次替換為args數(shù)組中的值 * @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分支下的個(gè)別行代碼//////////////////////// 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 Parser.parse("${", "}", text, args); } public static String parse1(String text, Object... args) { return Parser.parse("{", "}", text, args); } /** * 使用示例 * @param args */ public static void main(String... args) { //{}被轉(zhuǎn)義,不會(huì)被替換 System.out.println(Parser.parse("{", "}", "我的名字是\\{},結(jié)果是{},可信度是%{}", "雷鋒", true, 100)); System.out.println(Parser.parse0("我的名字是${},結(jié)果是${},可信度是%${}", "雷鋒", true, 100)); System.out.println(Parser.parse1("我的名字是{},結(jié)果是{},可信度是%{}", "雷鋒", true, 100)); // 輸出結(jié)果如下: // 我的名字是{},結(jié)果是true,可信度是%100 // 我的名字是雷鋒,結(jié)果是true,可信度是%100 // 我的名字是雷鋒,結(jié)果是true,可信度是%100 } }
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對創(chuàng)新互聯(lián)的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
分享文章:java字符串中${}或者{}等的占位符替換工具類
地址分享:http://muchs.cn/article42/pgoehc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、微信小程序、商城網(wǎng)站、品牌網(wǎng)站制作、網(wǎng)站維護(hù)、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)