Замена противоположных букв в алфавите
Задача: поменять буквы в пользовательском вводе на противоположные в алфавите, вроде легко, метод replace в помощь, но при замене букв на противоположные, они меняются обратно, например: строка "abcdfgz", - меняю "a" на "z" и "z" на "a", соответственно должно получиться: "zbcdfga" но получается: "abcdfga", так как при второй замене уже замененная первый раз буква меняется во второй, как сделать так, чтобы буквы менялись на противоположные в алфавите, только 1 раз?
Вот мой код, я там пробую только 2 буквы:
import java.util.*;
public class Program {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String vvod = scan.nextLine();
String res = vvod.replaceAll("a", "z").replaceAll("z", "a");
System.out.print(res);
}
}
Ответы (2 шт):
public enum Alphabet {
a('z'),
z('a');
private char letter;
Alphabet(char letter) {
this.letter = letter;
}
public char getLetter() {
return letter;
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String vvod = scan.nextLine();
char[] reverse = vvod.toCharArray();
for (int i = 0; i < reverse.length; i++) {
reverse[i] = Alphabet.valueOf(String.valueOf(reverse[i])).getLetter();
}
System.out.println(new String(reverse));
}
}
Каждую строку в Java можно представить в виде массива символов char. Каждый символ char имеет свой числовой код. Оперируя этими числами, можно изменять буквы по какой-либо определенной логике.
См. ответ на вопрос Как изменить шрифт, не используя методы вроде toUpperCase?
Для данного случая:
private static String replace(String text) {
char[] charArr = text.toCharArray();
for (int i = 0; i < charArr.length; i++) {
if (charArr[i] >= 'a' && charArr[i] <= 'z') {
charArr[i] = (char) ('z' - charArr[i] + 'a');
} else if (charArr[i] >= 'A' && charArr[i] <= 'Z') {
charArr[i] = (char) ('Z' - charArr[i] + 'A');
}
}
return String.valueOf(charArr);
}
public static void main(String[] args) {
String str1 = "abcdefghijklmnopqrstuvwxyz";
String str2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
String str3 = "aBcDeFgHiJkLmNoPqRsTuVwXyZ";
System.out.println(str1 + " | " + replace(str1));
System.out.println(str2 + " | " + replace(str2));
System.out.println(str3 + " | " + replace(str3));
// abcdefghijklmnopqrstuvwxyz | zyxwvutsrqponmlkjihgfedcba
// ABCDEFGHIJKLMNOPQRSTUVWXYZ | ZYXWVUTSRQPONMLKJIHGFEDCBA
// aBcDeFgHiJkLmNoPqRsTuVwXyZ | zYxWvUtSrQpOnMlKjIhGfEdCbA
System.out.println(replace(replace(str1)).equals(str1)); // true
System.out.println(replace(replace(str2)).equals(str2)); // true
System.out.println(replace(replace(str3)).equals(str3)); // true
}