[英]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
。
Matcher
應該更多地使用Appendable
Matcher
附加到任何Appendable
您可以嘗試String.replace(CharSequence target, CharSequence replacement)
。 它仍然使用模式和匹配器,但target
不是正則表達式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.