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 处),然后将其替换为“”。结果将是“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 回答