2015-01-15 3 views
3

제 질문은 문자열에있는 많은 문자를 각각 어떻게 변경할 수 있습니까?공백없이 문자열의 문자를 교체하십시오.

내가 이런 짓을하지만 아무것도

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

System.out.println(outputText); 
을 일어나지 : 나는 예를 들어 (H, X로 C, Y에 D, A와 G로 G에 A, B) 예를 들어, 변화에 대한 다른 변경 모든 편지를 의미

출력되어야

GXYAHHYYAA 
+0

별도로 교체해야합니다. – AJMansfield

답변

0

노력이 outputText = test.replaceAll ("A", "G"). 완전히 대체 ("B", "H"). 완전히 대체 ("C", "X")

+2

아니요. 솔루션에서 A가 G로 바뀝니다. 나중에 G가 A로 다시 바뀝니다. – Jason

+0

@ Jason 아니요, 그렇지 않습니다. – AJMansfield

+0

사실 마지막 매핑이 G로 돌아가서 A가 되었기 때문에 사실입니다. – Jason

4

하나의 가능한 방법은그리고 그것은 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.containsKey (c) 대신'map.getOrDefault (c, c);를 사용할 수 있습니까? map.get (c) : c;'. – Pshemo

+0

@Pshemo Nice. 하지만, ['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

자바 8 사용하는 경우 모두 :

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

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

결과를 수집하여 문자열로 바꿀 수도 있습니다.

관련 문제