栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

用JRE库替换StrSubstitutor

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用JRE库替换StrSubstitutor

如果性能不是优先事项,则
可以使用类的

appendReplacement
方法
Matcher

public class StrSubstitutor {    private Map<String, String> map;    private static final Pattern p = Pattern.compile("\$\{(.+?)\}");    public StrSubstitutor(Map<String, String> map) {        this.map = map;    }    public String replace(String str) {        Matcher m = p.matcher(str);        StringBuilder sb = new StringBuilder();        while (m.find()) { String var = m.group(1); String replacement = map.get(var); m.appendReplacement(sb, replacement);        }        m.appendTail(sb);        return sb.toString();    }}

一个更高性能但更丑陋的版本,只是为了好玩:)

    public String replace(String str) {        StringBuilder sb = new StringBuilder();        char[] strArray = str.toCharArray();        int i = 0;        while (i < strArray.length - 1) { if (strArray[i] == '$' && strArray[i + 1] == '{') {     i = i + 2;     int begin = i;     while (strArray[i] != '}') ++i;     sb.append(map.get(str.substring(begin, i++))); } else {     sb.append(strArray[i]);     ++i; }        }        if (i < strArray.length) sb.append(strArray[i]);        return sb.toString();    }

根据我的测试,它大约是regex版本的2倍,比apache
commons版本的3倍快。因此,普通的regex东西实际上比apache版本更优化。通常通常不值得。只是为了好玩,让我知道您是否可以使其更优化。

编辑
:正如@kmek指出的,有一个警告。Apache版本将过渡解决。例如,如果

${animal}
映射到
${dog}
dog
映射到
GoldenRetriever
,则apache版本将映射
${animal}
到Golden
Retriever。如我所说,您应该尽可能使用库。仅当您有不允许您使用库的特殊约束时,才可以使用上述解决方案。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/498397.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号