Замена символа на другой
Заменить все вхождения символа стоящего в позиции (3) на символ стоящий в позиции 0. Не подскажите как сделать? Именно с индекса 0 на индекс 3, я знаю только с помощью replace
Ответы (3 шт):
String s = "d1234567389";
String newString = s.replace(s.charAt(3) + "", s.charAt(0) + "");
System.out.println(newString);
Попробуйте следующий код:
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();
}
Выводы программы в первом и во втором случае соответственно:
Для замены всех вхождений можно применить 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

