2015-01-15 5 views
3

Мой вопрос в том, как я могу изменить много букв в строке соответственно? Я имею в виду каждое письмо было изменено на другой для примера изменения (от А до G, B Н, С в X, D к Y, G к А) , например:Заменить буквы в строке без пробела

Я сделал это, но ничего не произошло

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

System.out.println(outputText); 

Вывод должен быть

GXYAHHYYAA 
+0

Вам необходимо сделать замену отдельно. – AJMansfield

ответ

0

попробовать outputText = test.replaceAll ("А", "Г"). replaceAll ("В", "Н"). replaceAll ("С", "X") и т. д.

+2

№. В вашем решении A будет заменено на G, которое позже будет заменено на A. – Jason

+0

@ Джейсон Нет, это не так. – 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 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

Если вы используете Java 8:

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

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

Вы также можете собирать результаты и превращать их в строку.

Смежные вопросы