online - regex only numbers java
La solución isNumeric() más elegante para java (7)
Estoy transfiriendo un pequeño fragmento de código PHP a Java en este momento, y is_numeric($x)
en la función is_numeric($x)
para determinar si $x
es un número o no. No parece haber una función equivalente en Java, y no estoy satisfecho con las soluciones actuales que he encontrado hasta ahora.
Me inclino por la solución de expresión regular que se encuentra aquí: http://rosettacode.org/wiki/Determine_if_a_string_is_numeric
¿Qué método debo usar y por qué?
¿Probaste Integer.parseInt ()? (No estoy seguro del nombre del método, pero la clase Entero tiene un método que crea un objeto Entero a partir de cadenas). O si necesita manejar números no enteros, también hay métodos similares disponibles para objetos Dobles. Si estos fallan, se lanza una excepción.
Si necesita analizar números muy grandes (más grandes que int / doble) y no necesita el valor exacto, entonces un método simple basado en expresiones regulares podría ser suficiente.
En un lenguaje fuertemente tipado, un método genérico isNumeric (String num) no es muy útil. 13214384348934918434441 es numérico, pero no se ajusta a la mayoría de los tipos. Muchos de los que encajan no devolverán el mismo valor.
Como señaló Colin, no se recomienda llevar números en Strings con la aplicación. La función isNumberic solo debe ser aplicable para datos de entrada en métodos de interfaz. Estos deberían tener una definición más precisa que isNumeric. Otros han proporcionado varias soluciones. Las expresiones regulares se pueden usar para probar varias condiciones a la vez, incluida la longitud de cadena.
Opcionalmente puede usar una expresión regular también.
if (theString.matches("((-|//+)?[0-9]+(//.[0-9]+)?)+")))
return true;
return false;
Por lo general, es una mala idea tener un número en una cadena. Si desea utilizar este número, analícelo y utilícelo como un valor numérico. No debería necesitar "verificar" si se trata de un valor numérico, ya sea que quiera usarlo como numérico o no.
Si necesita convertirlo, puede usar todos los analizadores desde Integer.parseInt(String)
hasta BigDecimal(String)
Si solo necesita verificar que el contenido se pueda ver como un valor numérico, entonces puede salirse con la suya con expresiones regulares.
Y no use el parseInt si su cadena puede contener un flotador.
Solo use if ((x instancia de Número)
// si también verificamos el número que se puede analizar
|| (x instancia de String && x.matches ("((- | / +)? [0-9] + (/. [0-9] +)?) +"))
) {...}
// --- Todos los tipos numéricos incluyendo BigDecimal extend Number
¿Has investigado el uso de la biblioteca StringUtils ? Hay una función isNumeric () que podría ser lo que estás buscando. (Tenga en cuenta que "" se evaluaría como verdadero)
Tenga en cuenta que la función PHP isNumeric () determinará correctamente que el hexadecimal y la notación científica son números, y que el enfoque regex al que se vincula no lo hará.
Una opción, especialmente si ya está utilizando las bibliotecas de Apache Commons, es usar NumberUtils.isNumber () , de Commons-Lang. Manejará los mismos casos que manejará la función de PHP.