StringUtils.isNumeric devuelve verdadero para "" y falso para 7.8. Esto es, por supuesto, un comportamiento documentado, pero realmente no es el más conveniente para mí. ¿Hay algo más (idealmente en commons.lang) que proporcione un isActuallyNumeric?¿Existe una alternativa a StringUtils.isNumeric que haga lo que quiero decir?
Respuesta
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.
, 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) ...
La expresión regular no encontrará (y rechazará) una cadena con varios puntos decimales, como "123.9.1" – bdares
Creo que quiere decir "[^ \\ D \\.]" ... de lo contrario, tendrá una mala secuencia de caracteres de escape. –
@tim doblador, sí lo siento ... eso fue un error tipográfico al igual que la capital D –
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
}
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
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.
- 1. ¿Existe una alternativa al operador MULTISET que evite las subconsultas?
- 2. ¿Existe una alternativa moderna sessionStorage que funcione entre subdominios?
- 3. ¿Existe una alternativa simple a Readline?
- 4. ¿Existe una alternativa a TOP en MySQL?
- 5. ¿Existe una alternativa a HTML Tidy?
- 6. Rebase y lo que quiere decir refinanciar commit commits
- 7. alternativa a MVC que está débilmente acoplado?
- 8. lo que quiere decir pss en/proc/PID/smaps
- 9. ¿Existe una alternativa no Java a OSGi?
- 10. Quiero mejorar mi código jQuery, hace lo que quiero, demasiado feo, IMO
- 11. Haga que ImageMagick reconozca una fuente
- 12. ¿Alguien ha usado GWT y puede decir que realmente cumple lo que promete?
- 13. Android: Establecer el parámetro de Peso programáticamente hace lo contrario de lo que quiero
- 14. Una restricción que solo permite que una de dos tablas haga referencia a una tabla base
- 15. ¿Existe una función de suspensión alternativa en C a milisegundos?
- 16. ActiveRecord: haga que todos los campos de texto tengan llamadas antes de guardarlos, a menos que se especifique lo contrario
- 17. Entity Framework está tratando de crear una base de datos, pero no es lo que quiero
- 18. Haga que xml sea más legible
- 19. HashMap dice que Key no existe aunque lo hace
- 20. ¿Cómo funciona mmap? Quiero decir, qué tipo de problema puede hacer que falle
- 21. ¿Existe una alternativa más ordenada a `except: pass`?
- 22. ¿Existe una alternativa genérica a la clase ListDictionary?
- 23. ¿Existe una alternativa a los grandes atributos desordenados?
- 24. ¿Existe una alternativa a getClass(). GetResource() para un ImageIcon estático
- 25. ¿Existe una alternativa Perl o Lua a Capistrano?
- 26. ¿Existe una buena alternativa a la extensión SOAP de PHP?
- 27. Una alternativa productiva a UML
- 28. Rails PDF que genera una alternativa a la gamba
- 29. Ingrese el botón de activación de la tecla, haga clic en, pero no lo quiero en
- 30. ¿Cómo puedo hacer que Git haga la sugerencia de "quise decir"?
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
Esto es un poco mejor. Desafortunadamente: '** + 2 **' resulta ser NOT isNumber(). – will
Afortunadamente, isNumber ("** - 2 **") da _true_. – will