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?
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