作者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