Ответ 1
Commons replaceChars может быть вашим лучшим выбором. AFAIK там нет замены (ar ar) в JDK.
Я хотел бы знать, есть ли эквивалент tr///(как используется в Perl) в Java. Например, если бы я хотел заменить все "s" на "p" s в "mississippi" и наоборот, я мог бы в 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);
Есть ли лучший способ сделать это?
Спасибо заранее.
Commons replaceChars может быть вашим лучшим выбором. AFAIK там нет замены (ar ar) в JDK.
В зависимости от того, насколько статична ваша замена, вы можете сделать
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) или, если все остальное не работает, hashmap от Character
до Character
.
Как уже отмечалось, @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"
...