1

ある文字列を別の文字列からクレンジングしようとしています。

before = before.replaceAll(Constants.GENE_START_SEQUENCE, "");

それでも、次のアサーションは時々失敗します。

assert before.indexOf(Constants.GENE_START_SEQUENCE) == -1 : before;

これはアサートが吐き出すものです:

IIAOOOCOAAAOCCIOOOACAIAOACICOOIAIOOICIIOIIOICOICCCOOAOICOCOOIIOOAOAACIIOCCICIOIII
4

2 に答える 2

11

replaceAll元の文字列のパターンの出現のみを置き換えます。置換の結果としてパターンが再発する場合、この新しい発生は置換されません。例:

"XXYY".replaceAll("XY", "");

これにより、"XY" が (インデックス 1 で) 1 つ検出され、それが "" に置き換えられます。結果は「XY」になります。これが起こらないようにしたい場合は、一致が見つからなくなるまで、replaceAll を再実行する必要がありますreplaceAll

String string = "XXYY";
String oldString;
do {
  oldString = string;
  string = string.replaceAll("XY", "");
} while(!string.equals(oldString));
// string will now be ""
于 2009-10-10T19:26:31.847 に答える
2

Constants.GENE_START_SEQUENCE有効な正規表現パターンであることを確認する必要があります。正規表現でない場合は、java.util.regex.Pattern の quote メソッドを使用してエスケープする必要があります。

于 2009-10-10T19:26:34.373 に答える