2012-10-18 26 views
9

Il seguente codice imposterà str a "testss"Perché replaceFirst e replaceAll danno risultati diversi?

String str = "test".replaceAll("(.*)$","$1s"); 

Dove come il seguente codice impostarlo a "test"

String str = "test".replaceFirst("(.*)$","$1s"); 

avrei aspettato entrambe le operazioni per produrre lo stesso risultato. Qualcuno può spiegare perché replaceAll aggiunge una s extra alla fine della stringa?

+0

Prova a fare questo '" (. * $) "' E cosa ottieni? – epascarello

+0

Sostituisci con '" [$ 1] "' invece - questo dovrebbe dare qualche suggerimento :) –

+0

hmm ... (. * $) Non ha aiutato, ma [$ 1] mi ha dato "[test] s [] s". Quindi c'è una cattura vuota. Perché? – cgTag

risposta

5

Questo perché "(.*)$" acquisisce due stringhe da "test", "test" e la stringa vuota (""). Quindi replaceAll aggiungerà due "s".

+0

grazie Mat. Dici "stringa vuota" a cui ti riferisci? – cgTag

+0

@MathewFoscarini '[test] []' <- la seconda cattura era la "stringa vuota" –

Problemi correlati