Как найти две соседние повторяющиеся цифры и заменить их одной цифрой в Java? - PullRequest
4 голосов
/ 05 ноября 2008

Мне нужно найти две соседние повторяющиеся цифры в строке и заменить их на одну. Как это сделать на Java. Некоторые примеры:

123345 должно быть 12345 77433211 должно быть 74321

Ответы [ 4 ]

15 голосов
/ 05 ноября 2008

Вероятно, 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"));
5 голосов
/ 05 ноября 2008

Я наконец сделал это сам. Те, кто ищет решение, вот как я это сделал:

import java.util.regex.*;

public class RepetingDigits{
    public static void main(String[] args) {
        String word = "77433211";
        Pattern pattern = Pattern.compile("(\\d)\\1");
        Matcher matcher = pattern.matcher(word);
        word = matcher.replaceAll("$1");  
        System.out.println(word);
    }
}

Еще проще:

**word = word.replaceAll("(\\d)\\1", "$1");**
0 голосов
/ 05 ноября 2008

Это регулярное выражение, состоящее из двух повторяющихся цифр (х - цифра)

[x]{2}(?!=[x])
0 голосов
/ 05 ноября 2008

с использованием регулярного выражения:

var myString='123345'
myString.replace(/([0-9])\1/g,'$1')

, что будет соответствовать ровно 2 повторениям.

'123334'.replace(/([0-9])\1+/g,'$1')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...