我的問題是我如何分別更改字符串中的許多字母?我的意思是每一個字母變爲另一個例如變更(A到G,B到H,C到X,d到Y,G到A) 例如:用空格替換字符串中的字母
我這樣做,但什麼都沒有發生
String test = "ACDGBBDDGG";
String outputText = test.replaceAll("ABCDG","GHXYA");
System.out.println(outputText);
輸出應該
GXYAHHYYAA
我的問題是我如何分別更改字符串中的許多字母?我的意思是每一個字母變爲另一個例如變更(A到G,B到H,C到X,d到Y,G到A) 例如:用空格替換字符串中的字母
我這樣做,但什麼都沒有發生
String test = "ACDGBBDDGG";
String outputText = test.replaceAll("ABCDG","GHXYA");
System.out.println(outputText);
輸出應該
GXYAHHYYAA
=的outputText test.replaceAll( 「A」, 「G」)。的replaceAll( 「B」, 「H」)。的replaceAll( 「C」, 「X」 )等。
否。在您的解決方案中,A將被G替換,稍後將被替換回A. – Jason
@Jason不,事實並非如此。 – AJMansfield
其實它是,因爲最後的映射將是G回到A. – Jason
一種可能的方法是添加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
感謝它的工作 –
從Java 8開始,我們可以使用'map.getOrDefault(c,c);'而不是'map.containsKey(c)? map.get(c):c;'。 – Pshemo
@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中是新的。 –
如果您使用的是Java 8:
String fromChars = "ABCDG";
String toChars = "GHXYA";
String test = "ACDGBBDDGG";
test.chars().forEach(ch->System.out.print(toChars.charAt(fromChars.indexOf(ch))));
您也可以收集結果並將其轉換爲字符串。
您需要分別進行替換。 – AJMansfield