[問題] 大字串取代

看板java作者 (LaPass)時間12年前 (2012/07/02 11:41), 編輯推噓6(607)
留言13則, 7人參與, 最新討論串1/1
如標題 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

07/02 12:15, , 1F
那你自己用 StringBuffer.replace() 慢慢玩也可以......
07/02 12:15, 1F

07/02 12:22, , 2F
正本清源,自己將所有pattern弄出一個FSM,然後在各個match
07/02 12:22, 2F

07/02 12:24, , 3F
state去將替換字串代入結果字串
07/02 12:24, 3F

07/02 12:26, , 4F
但若沒收費做這個效率改善或不做不會死,完全不值得這樣搞
07/02 12:26, 4F

07/02 12:28, , 5F
StringBuffer.replace() orz..... 這麼累還是算了吧.....
07/02 12:28, 5F

07/02 12:31, , 6F
看來適合閒的時候寫來玩,工作時就算了 = ="
07/02 12:31, 6F

07/02 12:46, , 7F
template engine 應該很多可以用....
07/02 12:46, 7F

07/02 12:48, , 8F
十年前我就寫過邊讀檔邊replace還含格式指令的 template
07/02 12:48, 8F

07/02 12:49, , 9F
engine, 只能說當時我真的吃飽太撐。
07/02 12:49, 9F

07/02 13:02, , 10F
感謝關鍵字,用template engine下去找到蠻多東西的 XD
07/02 13:02, 10F

07/02 13:31, , 11F
freemarker 或 velocity 都很好用
07/02 13:31, 11F

07/07 23:13, , 12F
樣板引擎的底層...應該也是replace吧!?
07/07 23:13, 12F

07/08 20:11, , 13F
用apache common lang的StringUtils.replaceEach方法即可
07/08 20:11, 13F
文章代碼(AID): #1FyHXpcp (java)