2016-04-07 11 views
7

Sto provando a sostituire tutti i caratteri ripetuti da una stringa in Java e ne consente solo uno.Sostituisci ricorsivoTutto java

Ad esempio:

aaaaa --->a

Per questo, ho provato con il metodo replaceAll:

"aaaaa".replaceAll("a*","a") //returns "aa" 

ho sviluppato un metodo ricorsivo, che probabilmente non è molto efficiente:

public String recursiveReplaceAll(String original,String regex, String replacement) { 
    if (original.equals(original.replaceAll(regex, replacement))) return original; 
    return recursiveReplaceAll(original.replaceAll(regex, replacement),regex,replacement); 
} 

Questo metodo funziona, mi stavo chiedendo se c'era qualcosa che utilizzava RegEx, ad esempio, che funziona con prestazioni migliori.

+2

'replaceAll (" a + "," a ")' – rock321987

risposta

12

L'approccio replaceAll era quasi corretto: è solo che * corrisponde a 0 occorrenze. Si desidera che + significhi "uno o più".

"aaaaa".replaceAll("a+","a") // Returns "a" 
7

È possibile farlo senza ricorsione. L'espressione regolare "(.)\\1+" corrisponderà a capture ogni carattere seguito da loro at least once e li sostituirà con il carattere acquisito. Quindi, questo rimuove qualsiasi carattere ripetuto.

public static void main(String[] args) { 
    String str = "aaaabbbaaa"; 
    String result = str.replaceAll("(.)\\1+", "$1"); 
    System.out.println(result); // prints "aba". 
} 

Con questo, funziona per tutti i caratteri.