簡體   English   中英

需要一個有效的算法來實現String.replaceAll()

[英]Need an efficient algorithm to implement String.replaceAll()

我在Java中找到了具有正則表達式基礎的String.replaceAll()。 在短字符串中工作正常。 但是在長字符串的情況下,我需要一種更有效的算法來代替String.replaceAll()。 任何人都可以提意見嗎? 謝謝!

如果要進行增量替換,可以對StringBuffer使用顯式的appendReplacement/Tail循環(不幸的是, StringBuilder ,還沒有StringBuilder重載)。

這是文檔中的慣用法:

 Pattern p = Pattern.compile(PATTERN);
 Matcher m = p.matcher(INPUT_SOURCE);

 StringBuffer sb = new StringBuffer();
 while (m.find()) {
     m.appendReplacement(sb, REPLACEMENT);
 }
 m.appendTail(sb);

 System.out.println(sb.toString());

這幾乎是實現replaceAll方式。

這種方法的好處是,由於您可以完全控制替換迭代,因此不必在任何給定時間將整個輸出存儲為可能是長String 您可以逐步生成輸出,並定期將StringBuffer內容刷新到磁盤。 也就是說,與使用replaceAll相比,使用此方法可以提高內存效率

(您也可以執行當前替換語法不支持的精美替換,例如toUpperCase()轉換)。

請注意,存在對Matcher增強要求,使其能夠附加到任何Appendable 如果被授予,您不僅可以使用StringBuilder ,還可以直接替換為FileWriter

相關問題

也可以看看

您可以嘗試String.replace(CharSequence target, CharSequence replacement) 它仍然使用模式和匹配器,但target不是正則表達式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM