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 ver
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
.
Commons' replaceChars may be your best bet. AFAIK there's no replacement (ar ar) in the JDK.
As @Dave already pointed out the closest replacement is
Apache Commons StringUtils.replaceChars(String str, String searchChars, String replaceChars)
Excerpt of the description:
...
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"
...