Java: str.replaceAll () не работает - PullRequest
1 голос
/ 10 октября 2009

Я пытаюсь очистить одну строку от другой.

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

И, тем не менее, следующее утверждение иногда не выполняется:

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

Это то, что утверждает ассорт:

IIAOOOCOAAAOCCIOOOACAIAOACICOOIAIOOICIIOIIOICOICCCOOAOICOCOOIIOOAOAACIIOCCICIOIII

Ответы [ 2 ]

11 голосов
/ 10 октября 2009

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 ""
2 голосов
/ 10 октября 2009

Вы должны убедиться, что Constants.GENE_START_SEQUENCE является допустимым шаблоном регулярных выражений. Если оно не должно быть регулярным выражением, вы должны экранировать его, используя метод quote в java.util.regex.Pattern.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...