2011-09-17 13 views
13

Me gustaría saber si hay un equivalente a tr /// (como se usa en Perl) en Java. Por ejemplo, si quería reemplazar todos "s" s con s "p" en "Mississippi" y viceversa, podría, en Perl, escribir¿hay alguna manera de usar tr /// (o equivalente) en java?

#shebang and pragmas snipped... 
my $str = "mississippi"; 
$str =~ tr/sp/ps/; # $str = "mippippissi" 
print $str; 

La única manera que puedo pensar para hacerlo en Java es utilizar un personaje ficticio con el método String.replace(), es decir

String str = "mississippi"; 
str = str.replace('s', '#'); // # is just a dummy character to make sure 
           // any original 's' doesn't get switched to a 'p' 
           // and back to an 's' with the next line of code 
           // str = "mi##i##ippi" 
str = str.replace('p', 's'); // str = "mi##i##issi" 
str = str.replace('#', 'p'); // str = "mippippissi" 
System.out.println(str); 

¿hay una mejor manera de hacer esto?

Gracias de antemano.

+0

este post podría ayudar http://stackoverflow.com/questions/ 3254358/replace-char-to-char-in-a-string –

Respuesta

6

Commons 'replaceChars puede ser su mejor apuesta. AFAIK no hay reemplazo (ar ar) en el JDK.

1

Dependiendo de qué tan estática que su reemplazo es, usted podría hacer

char[] tmp = new char[str.length()]; 
for(int i=0; i<str.length(); i++) { 
    char c = str.charAt(i); 
    switch(c) { 
    case 's': tmp[i] = 'p'; break; 
    case 'p': tmp[i] = 's'; break; 
    default: tmp[i] = c; break; 
    } 
} 
str = new String(tmp); 

Si los reemplazos necesitan variar en tiempo de ejecución, se puede reemplazar el interruptor con una búsqueda en la tabla (si se sabe que todos los puntos de código que necesita para reemplazar la caída en un rango limitado, como ASCII), o, si todo lo demás falla, un hashmap de Character a Character.

0

Como ya se ha señalado @Dave el reemplazo más cercano es

Apache Commons StringUtils.replaceChars(String str, String searchChars, String replaceChars)

Extracto de la descripción:

... 
StringUtils.replaceChars(null, *, *)   = null 
StringUtils.replaceChars("", *, *)    = "" 
StringUtils.replaceChars("abc", null, *)  = "abc" 
StringUtils.replaceChars("abc", "", *)   = "abc" 
StringUtils.replaceChars("abc", "b", null)  = "ac" 
StringUtils.replaceChars("abc", "b", "")  = "ac" 
StringUtils.replaceChars("abcba", "bc", "yz") = "ayzya" 
StringUtils.replaceChars("abcba", "bc", "y") = "ayya" 
StringUtils.replaceChars("abcba", "bc", "yzx") = "ayzya" 
... 
Cuestiones relacionadas