2010-09-08 18 views
8

¿Podemos tener una expresión regular para detectar si un número es par?Regex para verificar si un número es par

Me preguntaba si podemos tener una expresión regular para hacer esto en lugar de las operaciones habituales de % o de bits.

Gracias por las respuestas :)

+3

expresiones regulares operan en las cuerdas, pero la uniformidad es una propiedad de los números. ¿En qué formato están potencialmente sus números, en formato de cadena? – AakashM

+13

Por favor: solo preguntarse sobre esto, NO lo haga. Los tipos integrales primitivos (byte, corto, int y largo) están hechos para almacenar números. BigInteger está hecho para almacenar números realmente grandes. Las cadenas son para almacenar cadenas. – helios

+0

Pregunta de entrevista, ¿alguien? –

Respuesta

21

Dado que ya se ha dado la respuesta correcta, argumentaré que la expresión regular no sería mi primera opción para esto.

  • si el número se ajusta a la gama long, utilice %
  • si no, puede utilizar BigInteger.remainder(..), pero tal vez la comprobación de si el último char representa un dígito par sería más eficiente.
+6

Otro truco es comprobar que el dígito más a la derecha es 0 o 1, que será: (n & 1) == 1. Verdadero significa impar, de lo contrario, incluso –

54

Usted puede probar:

^-?\d*[02468]$ 

Explicación:

  • ^: Inicio ancla.
  • -?: Señal negativa opcional.
  • \d*: Cero o más dígitos.
  • [02468]: Clase Char para que coincida con un 0 o 2 o 4 o 6 o 8
  • $: Fin de anclaje
+1

más rápido y con explicación. prestigio. –

+4

Es bueno que no hayas olvidado los valores negativos.) –

1

Claro, usted acaba de comprobar si el último número es un Try 0/2/4/6/8

1

esto, no estoy seguro de si es la misma sintaxis de java:

^\d*(2|4|6|8|0)$ 
3

Si se trata de una cadena, simplemente comprobar si endsWith(0) || endsWith(2) || .. devuelve verdadero. Si es un número, es muy simple.

Cuestiones relacionadas