作者LaPass (LaPass)
看板java
标题[问题] 大字串取代
时间Mon Jul 2 11:41:36 2012
如标题
String s=".........";
s.replaceAll("ToName", "王先生");
s.replaceAll("FromName", "资讯部");
s.replaceAll("SendTime", "2012/07/01");
下略
印象中,java在处理这种状况时
每次取代都会从新产生个字串物件出来
基於这一点,我会觉得,如果s的大小很大 (例如几mb的文件)
以及取代的次数很多的话,会让效率变得很糟糕
像这种状况主要是用在套样式的状况
例如固定样式的信件或是表格之类的
(replaceAll里面有时候可能会用正规表示式之类的)
虽然目前没遇到效能的问题
但觉得还是先把解决方法找到会比较好
请问有什麽方式,或是使用什麽物件可以处理这种状况
或我根本是齐人忧天
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.59.16.65
1F:推 PsMonkey:那你自己用 StringBuffer.replace() 慢慢玩也可以...... 07/02 12:15
2F:推 bitlife:正本清源,自己将所有pattern弄出一个FSM,然後在各个match 07/02 12:22
3F:→ bitlife:state去将替换字串代入结果字串 07/02 12:24
4F:→ bitlife:但若没收费做这个效率改善或不做不会死,完全不值得这样搞 07/02 12:26
5F:→ LaPass:StringBuffer.replace() orz..... 这麽累还是算了吧..... 07/02 12:28
6F:→ LaPass:看来适合闲的时候写来玩,工作时就算了 = =" 07/02 12:31
7F:推 PsMonkey:template engine 应该很多可以用.... 07/02 12:46
8F:→ superlubu:十年前我就写过边读档边replace还含格式指令的 template 07/02 12:48
9F:→ superlubu:engine, 只能说当时我真的吃饱太撑。 07/02 12:49
10F:→ LaPass:感谢关键字,用template engine下去找到蛮多东西的 XD 07/02 13:02
11F:推 lovdkkkk:freemarker 或 velocity 都很好用 07/02 13:31
12F:推 joetsai:样板引擎的底层...应该也是replace吧!? 07/07 23:13
13F:推 ClareQ:用apache common lang的StringUtils.replaceEach方法即可 07/08 20:11