I would like to know if there is an equivalent to tr/// (as used in Perl) in Java. For example, if I wanted to replace all "s"s with "p"s in "mississippi" and vice versa, I could, in Perl, write
#shebang and pragmas snipped...
my $str = "mississippi";
$str =~ tr/sp/ps/; # $str = "mippippissi"
print $str;
The only way I can think of to do it in Java is to use a dummy character with the String.replace()
method, i.e.
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);
Is there a better way to do this?
Thanks in advance.
Commons' replaceChars may be your best bet. AFAIK there's no replacement (ar ar) in the JDK.
Depending on how static your replacement is, you could do
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);
If the replacements need to vary at runtime, you could replace the switch with a table lookup (if you know that all the codepoints you need to replace fall into a limited range, such as ASCII), or, if everything else fails, a hashmap from Character
to Character
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With