Вы можете сделать это следующим образом:
String str = "3433434";
boolean sevenOf2Digits = str.length() == 7 &&
str.matches("(\\d)\\1*+(\\d)(\\1|\\2)*");
System.out.println(sevenOf2Digits);
Первая (\\d)
захватывает первую цифру в группе 1.
\\1
это обратная ссылка на группу 1, поэтому первая цифра. *
равно 0 или более из этих цифр, +
делает это притяжательным, что необходимо для предотвращения совпадения следующей (\\d)
с той же цифрой.
Следующая (\\d)
захватывает вторую цифру в группе 2.
(\\1|\\2)*
просто соответствует 0 или более любой комбинации первой или второй цифры.
Я выделил проверку длины для простоты. Если вы хотите получить чистое решение для регулярных выражений, вы можете добавить проверку длины в свое регулярное выражение в виде заглядывания, добавив (?=.{7}$)
к началу вашего регулярного выражения.
"(?=.{7}$)(\\d)\\1*+(\\d)(\\1|\\2)*"