2015-01-15 111 views
3

我的問題是我如何分別更改字符串中的許多字母?我的意思是每一個字母變爲另一個例如變更(A到G,B到H,C到X,d到Y,G到A) 例如:用空格替換字符串中的字母

我這樣做,但什麼都沒有發生

String test = "ACDGBBDDGG"; 
String outputText = test.replaceAll("ABCDG","GHXYA"); 

System.out.println(outputText); 

輸出應該

GXYAHHYYAA 
+0

您需要分別進行替換。 – AJMansfield

回答

0
嘗試

=的outputText test.replaceAll( 「A」, 「G」)。的replaceAll( 「B」, 「H」)。的replaceAll( 「C」, 「X」 )等。

+2

否。在您的解決方案中,A將被G替換,稍後將被替換回A. – Jason

+0

@Jason不,事實並非如此。 – AJMansfield

+0

其實它是,因爲最後的映射將是G回到A. – Jason

4

一種可能的方法是添加char和它的置換到Map,然後將兩個等

Map<Character, Character> map = new HashMap<>(); 
map.put('A', 'G'); 
map.put('B', 'H'); 
map.put('C', 'X'); 
map.put('D', 'Y'); 
map.put('G', 'A'); 

String test = "ACDGBBDDGG"; 
StringBuilder sb = new StringBuilder(); 
for (char c : test.toCharArray()) { 
    char o = map.containsKey(c) ? map.get(c) : c; 
    sb.append(o); 
} 
System.out.println(sb.toString()); 

另一種可能性之間的「地圖」(雖然在運行時間方面更復雜)。將使用相應的字符的索引在String

String in = "ABCDG"; 
String out = "GHXYA"; 
String test = "ACDGBBDDGG"; 
StringBuilder sb = new StringBuilder(); 
for (char c : test.toCharArray()) { 
    int i = in.indexOf(c); 
    char o = (i > -1) ? out.charAt(i) : c; 
    sb.append(o); 
} 
System.out.println(sb.toString()); 

兩個輸出(請求)

GXYAHHYYAA 
+0

感謝它的工作 –

+0

從Java 8開始,我們可以使用'map.getOrDefault(c,c);'而不是'map.containsKey(c)? map.get(c):c;'。 – Pshemo

+0

@Pshemo好的。但是,正如您所記錄的['Map.getOrDefault(Object key,V defaultValue)'](http://docs.oracle.com/javase/8/docs/api/java/util/Map.html#getOrDefault-java。 lang.Object-V-)在Java 8中是新的。 –

0

如果您使用的是Java 8:

String fromChars = "ABCDG"; 
String toChars = "GHXYA"; 
String test = "ACDGBBDDGG"; 

test.chars().forEach(ch->System.out.print(toChars.charAt(fromChars.indexOf(ch)))); 

您也可以收集結果並將其轉換爲字符串。