Вероятно, replaceAll("(\\d)\\1+", "$1")
$
играет особую роль в замещающей строке, обозначая первую группу захвата.
+
позволяет заменить столько идентичных номеров, сколько возможно (\\d)\\1
заменит их только парой: 777xx
=> 77xx
(спасибо Бен Дум за замечание)
Итак:
System.out.println("77433211".replaceAll("(\\d)\\1+", "$1"));
вернет
74321
String java.lang.String.replaceAll(String regex, String replacement)
Заменяет каждую подстроку этой строки, которая соответствует заданному регулярному выражению с заданной заменой.
Вызов этого метода в форме str.replaceAll(regex, repl)
дает точно такой же результат, как выражение
java.util.regex.Pattern.compile(regex).matcher(str).replaceAll(repl)
Предупреждение : функция String.replaceAll()
не изменяет строку, к которой она применяется. Возвращает измененную строку (или новую строку с тем же содержимым , если шаблон ничего не соответствует)
Таким образом, вам нужно повлиять на результат replaceAll()
обращения к себе, чтобы фактически обновить строку с изменениями регулярного выражения.
String aString = "77433211"
aString = aString.replaceAll("(\\d)\\1+", "$1"));