Проверьте, содержит ли строка только конкретную цифру (например, «111») - PullRequest
5 голосов
/ 09 мая 2019

Необходимо выяснить, содержит ли данная строка только конкретную цифру - например «111», «2», «33» должны вернуть true.

«12» должно возвращать false.

Пустая строка ("") также должна возвращать true.

Строка содержит только цифры и никаких других символов.

Написал некрасивое регулярное выражение Java, которое, кажется, работает, но не может не думать, что оно должно быть написано гораздо более коротким способом:

str.matches("1*|2*|3*|4*|5*|6*|7*|8*|9*|0*")

Есть ли более простой и элегантный способ сделать это, избегая перечисления всех цифр по одной?

1 Ответ

9 голосов
/ 09 мая 2019

Вы можете использовать это регулярное выражение, которое использует группу для захвата первой цифры, а затем использует обратную ссылку, чтобы убедиться, что все следующие цифры совпадают,

^(\d)?\1*$

Пояснение:

  • ^ - начало строки
  • (\d)? - соответствует одной цифре и захватывает в group1, а ? делает необязательным разрешение совпадения пустых строк.
  • \1* - соответствует одной и той же цифре ноль или более раз
  • $ - конец строки

Regex Demo

Java-код,

List<String> list = Arrays.asList("5","5555","11111","22222","1234", "");
list.forEach(x -> {
    System.out.println(x + " --> " + x.matches("(\\d)?\\1*"));
});

печать

5 --> true
5555 --> true
11111 --> true
22222 --> true
1234 --> false
 --> true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...