java replace 效率_JAVA提高String.replace() 執行速度的方法

繼續上一篇的內容,為了這些問題,我詢問了PTT 的 JAVA版,也很感謝有人替我解答,並教我如何提高replace 的效率

參考資料 https://www.facebook.com/java.tw 的 5月8日的文章

這個方法經過測試,應該可以使用正規表示式,但我測試的次數不夠多,也不保證其效率

簡單來說 就是 JAVA 官方提供的 String 中的 replace() 把所有的任務都當成正規表示式來處理,所以效率不彰,而如果我們只是要做單純的文字置換,顯然不需要那些步驟。

以下是程式碼+口語化只有我自己懂得演算法

public class Replace {

public Replace() {

// TODO Auto-generated constructor stub

}

public static String replace(String str, String patten, String replacement) {

// str 要置換的字串 把patten換成 replacement

int pos = str.indexOf(patten);

return pos < 0 ? str : _replace(str, patten, replacement, pos);

}

/**演算法說明

*

* @param str 資料

* @param patten 要換掉的文字

* @param replacement 要改成的文字

* @param pos 那段文字在哪

* @return

* 1. 從頭開始找出符合的字串,並且標示第幾個字放進pos

* 2. 先把在pos前面的字放進結果區(newContent)

* 3. 再放進replacement

* 4. 再去找下一個字的位置放進pos

* 5. 接續步驟三直到全部找完為止

*/

public static String _replace(String str, String patten,

String replacement, int pos) {

int len = str.length();

int plen = patten.length();

StringBuilder newContent = new StringBuilder(len);

int lastPos = 0;

do {

newContent.append(str, lastPos, pos);

newContent.append(replacement);

lastPos = pos + plen;

pos = str.indexOf(patten, lastPos);

} while (pos > 0);

newContent.append(str, lastPos, len);

return newContent.toString();

}

}

經過我在小說下載器上的實際測試結果

效率提高的8倍左右

以下是測試數據,以一部124頁的小說當作測試樣本

使用String.repalce() :總共花費 112890.0ms ;其中下載花費80601.0ms  資料處理花費 32289.0ms

使用新的方法             :總共花費 71188.0ms ;其中下載花費67008.0ms 資料處理花費  4180.0 ms

下載花費時間取決於測試當下的網路狀況

2fae06c41c20ea8d5a65d24e03678149.png8a8dc5eca768c48762a4752d631e171b.pngd9bfe126ce0049a49e06d2051dfee1ab.png749d34cc58b88f5fc0cb0119168f756c.png

請按讚:

喜歡 正在載入...

相關

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值