Замена символа на другой

Заменить все вхождения символа стоящего в позиции (3) на символ стоящий в позиции 0. Не подскажите как сделать? Именно с индекса 0 на индекс 3, я знаю только с помощью replace


Ответы (3 шт):

Автор решения: Adm123
        String s = "d1234567389";
        String newString = s.replace(s.charAt(3) + "", s.charAt(0) + "");
        System.out.println(newString);
→ Ссылка
Автор решения: oQaris

Попробуйте следующий код:

        public static void main(String[] args) {
            String exampleStr = "Hello, World!";
            // Замена всех символов с 0 позиции ('H') на символ с 3 позиции ('l')
            System.out.println(replaceAllByIndex(exampleStr, 0, 3));
            // Замена всех символов с 4 позиции ('o') на символ с 12 позиции ('!')
            System.out.println(replaceAllByIndex(exampleStr, 4, 12));
        }

        public static String replaceAllByIndex(String input, int dstIdx, int srcIdx) {
            return input.replace(input.charAt(dstIdx), input.charAt(srcIdx));
        }

Здесь функция replaceAllByIndex выполняет замену всех вхождений символа, находящегося по индексу dstIdx на символ с индексом srcIdx в строке input.

Однако если вашей целью стоит просто поменять местами два символа (а не все вхождения), то используйте следующую функцию вместо replaceAllByIndex в коде выше:

        public static String swapChars(String input, int lIdx, int rIdx) {
            StringBuilder sb = new StringBuilder(input);
            sb.setCharAt(lIdx, input.charAt(rIdx));
            sb.setCharAt(rIdx, input.charAt(lIdx));
            return sb.toString();
        }

Выводы программы в первом и во втором случае соответственно:

введите сюда описание изображения введите сюда описание изображения

→ Ссылка
Автор решения: Alex Rudenko

Для замены всех вхождений можно применить replaceAll, но здесь придется заэкранировать символы при помощи Pattern.quote:

String str = "|$$$|+++|-$-|";
System.out.println(str.replaceAll(Pattern.quote(str.substring(3, 4)), str.substring(0, 1)));
// -> |||||+++|-|-|

При использовании replace экранирование выполняется по умолчанию:

System.out.println(str.replace(str.substring(3, 4), str.substring(0, 1)));

Для перестановки двух символов можно применить String.replaceFirst с такой регуляркой: "^(.)(..)(.)", просто переставив группы в обратной последовательности "$3$2$1",

  • группа 1 ^(.) с якорем начала строки соответствует charAt(0),
  • группа 2 (..) - символы между 0-м и 3-м, может быть записана как (.{2})
  • группа 3 -- charAt(3)
String str = "Swap Letters";
System.out.println(str.replaceFirst("^(.)(..)(.)", "$3$2$1"));

Результат:

pwaS Letters
→ Ссылка