2011-09-17 41 views
13

我想知道在Java中是否有等價於tr ///(在Perl中使用)。例如,如果我想全部替換「的」 s的「P」 S在「密西西比」,反之亦然,我可以,在Perl,寫有沒有辦法在java中使用tr ///(或等效)?

#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

這篇文章可能有助於http://stackoverflow.com/questions/ 3254358 /替換炭到炭在-A-串 –

回答

6

下議院'replaceChars可能是你最好的選擇。 AFAIK在JDK中沒有替換(ar ar)。

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),或者如果其他所有事情都失敗了,可以使用從CharacterCharacter的散列圖。

0

正如@戴夫已經指出了最近更換

阿帕奇百科全書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" 
... 
相關問題