用java替换字符串中所有标签的最佳方法
我有一个服务方法,它接受一个字符串,然后用标签库中的项目替换字符串中的标签。 如下:
for( MetaDataDTO tag : tagValues )
{
message = message.replace( tag.getKey(), tag.getText1() );
}
显然; 这会产生大量新字符串,这是不好的。 但是 StringBuilder 的替换方法对于一个字符串中的多个字符串使用起来很麻烦。 我怎样才能使我的方法更有效?
它用于文本块,例如:
亲爱的#firstName#,您的#applicationType#申请已被#approvedRejected#抱歉。
其中#firstName#等是元数据数据库中的键。 标签也可能不被哈希字符包围。
I have a service method that takes a String and then replaces tags in the String with items from a tag library. As follows:
for( MetaDataDTO tag : tagValues )
{
message = message.replace( tag.getKey(), tag.getText1() );
}
Obviously; this make heaps of new strings and is BAD. But the StringBuilder replace method is cumbersome to use for multiple strings inside one string. How can I make my method more efficient?
It is for use with blocks of text such as:
Dear #firstName#, your application for #applicationType# has been #approvedRejected# sorry.
Where #firstName#, etc are the keys in a meta data database. It is also possible that tags may not be surrounded by hash characters.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
基本上你想复制 Matcher.replaceAll() 像这样:
注意:我已经对有效标签(即正则表达式中的 \w)做出了假设。 您需要满足真正有效的要求(例如“#([\w_]+)#”)。
我还假设上面的标签看起来像:
而不是:
如果第二个是正确的,您需要进行相应的调整。
此方法只对消息字符串进行一次传递,因此没有比这更高效的方法了。
Basically you want to copy the execution of Matcher.replaceAll() like so:
Note: I've made an assumption about the valid tag (namely \w in the regex). You will need to cater this for what's really valid (eg "#([\w_]+)#").
I've also assumed the tags above looks something like:
and not:
If the second is correct you'll need to adjust accordingly.
This method makes exactly one pass across the message string so it doesn't get much more efficient than this.
库中的解决方案:“org.apache.commons:commons-text:{version}”。
使用示例:
Solution from library: 'org.apache.commons:commons-text:{version}'.
Usage example:
谢谢你们的帮助。 当然了解了更多关于java的知识。 这是我的解决方案。 通过这种方式来支持不同外观的标签和标签内的标签:
Thanks for your help guys. Certainly learned more about java. Here is my solution. It is this way to support different looking tags and tags within tags: