我想知道Java中是否存在等价于tr ///(在Perl中使用的)。例如,如果我想用“密西西比”中的“p”替换所有“s”,反之亦然,我可以在Perl中编写
#shebang and pragmas snipped...
my $str = "mississippi";
$str =~ tr/sp/ps/; # $str = "mippippissi"
print $str;
我能想到用Java做的唯一方法是使用带有String.replace()
方法的虚拟字符,即
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);
有更好的方法吗?
提前致谢。
答案 0 :(得分:5)
Commons'replaceChars可能是您最好的选择。 AFAIK在JDK中没有替代品(ar ar)。
答案 1 :(得分:1)
根据您的替换静态程度,您可以
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);
如果替换需要在运行时变化,您可以使用表查找替换开关(如果您知道需要替换的所有代码点都属于有限范围,例如ASCII),或者,如果其他一切都失败,从Character
到Character
的散列图。
答案 2 :(得分:0)
正如@Dave已经指出最接近的替代品是
Apache Commons StringUtils.replaceChars(String str, String searchChars, String replaceChars)
描述摘录:
...
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"
...