2012-05-31 5 views

Respuesta

29

Probar isNumber(String) desde org.apache.commons.lang.math.NumberUtils.

Comprueba si la cadena [es] un número válido de Java.

Los números válidos incluyen el hexadecimal marcado con el calificador 0x, la notación científica y los números marcados con un calificador de tipo (por ejemplo, 123L).

Null y cadena vacía devolverá false.

ACTUALIZACIÓN -

isNumber(String) ahora es obsoleto. Use isCreatable(String) en su lugar.

Gracias eav por señalarlo.

+1

algunas cadenas como "5.f" o "5.d" se registrarán como números (supongo que tienen algo que ver con la notación doble o flotante), pero otras como "5.x" no lo harán. – dstrube

+0

Esto es un poco mejor. Desafortunadamente: '** + 2 **' resulta ser NOT isNumber(). – will

+2

Afortunadamente, isNumber ("** - 2 **") da _true_. – will

1

, alternativamente, se puede comprobar para ver si coincide con cualquier carácter de un dígito no como esto ..

if(myStr.replaceAll("^$"," ").matches("[^\\d\\.]")) entonces usted sabe que hay cosas ahí que no es 0-9 y/o una.

Aquí es el equivalente Javascript (modificar la cadena de experimentar) ...

http://jsfiddle.net/LzZE6/

+2

La expresión regular no encontrará (y rechazará) una cadena con varios puntos decimales, como "123.9.1" – bdares

+0

Creo que quiere decir "[^ \\ D \\.]" ... de lo contrario, tendrá una mala secuencia de caracteres de escape. –

+0

@tim doblador, sí lo siento ... eso fue un error tipográfico al igual que la capital D –

5

Esto no es exactamente en commons.lang, pero funcionará.

try { 
    double d = Double.parseDouble(string); 
    // string is a number 
} catch (NumberFormatException e) { 
    // string is not a number 
} 
+1

Esta solución asume que solo vas a obtener números de base 10 dentro del dominio de dobles. Lo cual no es una mala suposición la mayor parte del tiempo, y esta solución no crea nuevas dependencias. +1 – bdares

2

NumberUtils.isNumber está obsoleto.

su debe utilizar

NumberUtils.isCreatable 

o

NumberUtils.isParsable 

Todas ellas cuentan con el valor decimal de punto:

  • NumberUtils.isCreatable apoyo hexadecimal, los números octales, notación científica y los números marcados con un calificador de tipo (por ejemplo, 123L). Los valores octales no válidos devolverán false (por ejemplo, 09). Si desea obtener su valor, debe usar NumberUtils.createNumber.
  • NumberUtils.isParsable solo admite 0~9 y punto decimal (.), cualquier otro carácter (por ejemplo, espacio u otro) devolverá false.

Por cierto, el implemento StringUtils.isNumberic tiene algunas diferencias entre commons-lang y commons-lang3. En commons-lang, StringUtils.isNumberic("") es true.Pero en commons-lang3, StringUtils.isNumberic("") es false. Puede obtener más información por documentos.

Cuestiones relacionadas