2009-10-10 35 views
1

我試圖從另一個字符串中清理一個字符串。Java:str.replaceAll()不工作

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

然而,下列說法有時會失敗:

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

這是斷言吐出:

IIAOOOCOAAAOCCIOOOACAIAOACICOOIAIOOICIIOIIOICOICCCOOAOICOCOOIIOOAOAACIIOCCICIOIII 
+6

如果您可以提供一個獨立的示例(包括所討論的常量)來演示所描述的行爲,我會給您一個cookie。 –

+0

什麼是Constants.GENE_START_SEQUENCE? – llamaoo7

回答

11

replaceAll只替換模式的出現次數在原始字符串。如果模式因替換而重新出現,則這種新的出現將不會被替換。例如:

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

這會找到一個「XY」(位於索引1),然後用「」代替。結果將是「XY」。如果你想防止這種情況發生,你必須rexecute replaceAll,直到replaceAll停止找到一個匹配。

String string = "XXYY"; 
String oldString; 
do { 
    oldString = string; 
    string = string.replaceAll("XY", ""); 
} while(!string.equals(oldString)); 
// string will now be "" 
+0

@Aaron:感謝您的錯誤修正。 – sepp2k

2

你應該確保Constants.GENE_START_SEQUENCE是一個有效的正則表達式。如果它不應該是一個正則表達式,則應該使用java.util.regex.Pattern上的quote方法將其轉義。