Compruebe si la cadena contiene sólo un dígito en particular (por ejemplo, "111")

RNAME;

Necesidad de saber si una determinada cadena sólo contiene sólo un dígito en particular - por ejemplo, "111", "2", "33" debe devolver verdadero.

"12" debe devolver false.

cadena vacía ( "") también debe devolver verdadero.

La cadena contiene sólo dígitos y no otros caracteres.

Escribió una expresión regular de Java fea que parece funcionar, pero no puedo evitar pensar que debe ser escrito de una manera mucho más corto:

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

¿Hay una manera más simple y más elegante de hacer lo anterior, evitando la lista de todos los dígitos uno por uno?

Pushpesh Kumar Rajwanshi:

Se puede utilizar esta expresión regular, que utiliza el grupo para capturar el primer dígito y luego usa respaldo de referencia para asegurar que los siguientes dígitos son todos iguales,

^(\d)?\1*$

Explicación:

  • ^ - Comienzo de la cadena
  • (\d)?- Hace coincidir un dígito y capturas en el grupo 1 y ?hace que sea opcional para permitir a juego cadenas vacías.
  • \1* - Hace coincidir el mismo cero dígitos o más veces
  • $ - Fin de la cadena

demostración de expresiones regulares

código Java,

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

Huellas dactilares,

5 --> true
5555 --> true
11111 --> true
22222 --> true
1234 --> false
 --> true

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=178060&siteId=1
Recomendado
Clasificación