Подтвердить что ты не робот

Есть ли способ использовать tr///(или эквивалент) в java?

Я хотел бы знать, есть ли эквивалент 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);

Есть ли лучший способ сделать это?

Спасибо заранее.

4b9b3361

Ответ 1

Commons replaceChars может быть вашим лучшим выбором. AFAIK там нет замены (ar ar) в JDK.

Ответ 2

В зависимости от того, насколько статична ваша замена, вы можете сделать

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.

Ответ 3

Как уже отмечалось, @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"
...