Java API といくつかの一般的なサードパーティ ライブラリを調べましたが、StringBuilder を除いて、String.replaceAll が行うことを行う適切なメソッドを見つけることができません。
少し作業すれば StringBuffer で実行できることはわかっていますが、StringBuffer の方が遅いため、この道をたどりたくありません。
サードパーティのユーティリティを知っている人はいますか、またはこの機能を実装するための簡単なコードがあるかどうかは?
Java API といくつかの一般的なサードパーティ ライブラリを調べましたが、StringBuilder を除いて、String.replaceAll が行うことを行う適切なメソッドを見つけることができません。
少し作業すれば StringBuffer で実行できることはわかっていますが、StringBuffer の方が遅いため、この道をたどりたくありません。
サードパーティのユーティリティを知っている人はいますか、またはこの機能を実装するための簡単なコードがあるかどうかは?
CharSequence
正規表現は、内部でミュータブルを変更しません。正規表現は a を解析して aをCharSequence
返します。 は結果です。は特別な処理があるため例外です。String
String
StringBuffer
StringBuilder
CharSequence
代わりにできること:
// Class
private static final Pattern MY_PATTERN = Pattern.compile("my|regex");
{ // Method
StringBuilder builder;
// ...
Matcher m = MY_PATTERN.matcher(builder);
builder.replace(0, builder.length(), m.replaceAll("<b>$0</b>"));
}
StringBuffer の方が遅いため、この道をたどりたくありません。
確かにそうですが、通常の時期尚早な最適化の注意事項があり、さらに重要なことに、最新の JVM は特定のケースでエスケープ分析を使用して StringBuffer/Vector/HashTable ロックを削除するため、最適化が行われると、パフォーマンスはほぼ同じになります。
Apache Harmony Matcher のソース コードはStringBuilder
、現在使用されているStringBuffer
. それに多くの依存関係を引きずっていないようです。ファイルの先頭にあるApacheライセンスは、商用プロジェクトでも悪くないかもしれません。
GNU Classpathコードも再利用できますが、ライセンスはより難しくなります (Matcher の変更されたバージョンを公開する必要がありますが、おそらくコードの残りの部分は必要ありません)。こちらの OpenJDK プロジェクトで見つけることができる元の Sun の実装についても同じです。