Introducción
Contenido
Las cadenas son una forma práctica de transmitir información y obtener información de un usuario.
En este artículo, analizaremos un par de formas para verificar si una cadena es numérica en Java, es decir, si una cadena representa un valor numérico.
Compruebe si la cadena es numérica con Core Java
Los usuarios tienden a escribir incorrectamente los valores de entrada con bastante frecuencia, razón por la cual los desarrolladores deben tomar su mano tanto como sea posible durante las operaciones de E / S.
La forma más sencilla de comprobar si un String
sea numérico o no mediante uno de los siguientes métodos incorporados de Java:
Integer.parseInt()
Integer.valueOf()
Double.parseDouble()
Float.parseFloat()
Long.parseLong()
Estos métodos convierten un determinado String
en su equivalente numérico. Si no pueden convertirlo, un NumberFormatException
se lanza, lo que indica que la Cadena no era numérica.
Vale la pena señalar que Integer.valueOf()
devuelve un new Integer()
, mientras Integer.parseInt()
devuelve un primitivo int
. Tenga esto en cuenta si tal diferencia cambia el flujo de su programa.
Probemos esto:
String string = "10";
try {
intValue = Integer.parseInt(string);
return true;
} catch (NumberFormatException e) {
System.out.println("Input String cannot be parsed to Integer.");
}
Esto resulta en:
Te puede interesar:Java: compruebe si la cadena comienza con otra cadenatrue
Ahora, podemos abstraer esta funcionalidad en un método auxiliar por conveniencia:
public static boolean isNumeric(String string) {
int intValue;
System.out.println(String.format("Parsing string: "%s"", string));
if(string == null || string.equals("")) {
System.out.println("String cannot be parsed, it is null or empty.");
return false;
}
try {
intValue = Integer.parseInt(string);
return true;
} catch (NumberFormatException e) {
System.out.println("Input String cannot be parsed to Integer.");
}
return false;
}
Ahora, simplemente podemos llamar:
String string = "10";
if(isNumeric(string)) {
System.out.println("String is numeric!");
// Do something
} else {
System.out.println("String is not numeric.");
}
Ejecutar este código resultaría en:
Parsing string: "10"
String is numeric!
Por otro lado, si esperamos String
para contener un número realmente grande, entonces podemos llamar al BigInteger(String)
constructor, que traduce el String
representación en un BigInteger
.
Compruebe si la cadena es numérica con Apache Commons
Apache Commons es una de las bibliotecas de terceros más utilizadas para expandir el marco básico de Java. Nos da un control más preciso sobre las clases centrales de Java, en este caso, Strings.
Veremos dos clases de la biblioteca Apache Commons:
NumberUtils
StringUtils
Ambos son muy similares a sus contrapartes de clase vainilla Java, pero con énfasis en nulo seguro operaciones (en números y cadenas respectivamente), lo que significa que incluso podemos definir valores predeterminados para valores perdidos (nulos).
Veamos ahora cómo podemos verificar los valores numéricos usando estos métodos.
Te puede interesar:Java 8 – Ejemplos de Stream.map ()NumberUtils.isParsable ()
Este método acepta un String
y comprueba si es un número analizable o no, podemos usar este método en lugar de detectar una excepción al llamar a uno de los métodos que mencionamos anteriormente.
Esto es muy bueno porque las soluciones que implican el manejo frecuente de excepciones deben evitarse si es posible; esto es exactamente en lo que nos ayuda este método.
Tenga en cuenta que los números hexadecimales y las notaciones científicas no se consideran analizables.
Ahora, ni siquiera necesitamos un método auxiliar de conveniencia, ya que isParseable()
devuelve un boolean
sí mismo:
String string = "10";
if (NumberUtils.isParsable(string)) {
System.out.println("String is numeric!");
} else {
System.out.println("String is not numeric.");
}
Este código debería devolver:
String is numeric!
NumberUtils.isCreatable ()
Este método también acepta una cadena y comprueba si es un número Java válido. Con este método podemos cubrir aún más números, porque un número Java válido incluye incluso números hexadecimales y octales, notación científica, así como números marcados con un calificador de tipo.
Ahora, incluso podemos usar algo como:
String string = "0x10AB";
if (NumberUtils.isCreatable(string)) {
System.out.println("String contains a creatable number!");
} else {
System.out.println("String doesn't contain creatable number.");
}
La salida sería:
Te puede interesar:Guía de JPA con Hibernate: Mapeo básicoString contains a creatable number!
NumberUtils.isDigits ()
los NumberUtils.isDigits()
El método comprueba si una cadena contiene solo dígitos Unicode. Si el String
contiene un signo inicial o un punto decimal, el método devolverá false
:
String string = "25";
if (NumberUtils.isDigits(string)) {
System.out.println("String is numeric!");
} else {
System.out.println("String isn't numeric.");
}
StringUtils.isNumeric ()
los StringUtils.isNumeric()
es el StringUtils
equivalente de NumberUtils.isDigits()
.
Si el String
pasa la prueba numérica, aún puede generar un NumberFormatException
error cuando se analiza mediante los métodos que mencionamos anteriormente, por ejemplo, si está fuera de rango para int
o long
.
Usando este método podemos determinar si podemos analizar String
en una Integer
:
String string = "25";
if (StringUtils.isNumeric(string)) {
System.out.println("String is numeric!");
} else {
System.out.println("String isn't numeric.");
}
StringUtils.isNumericSpace ()
Además, si esperamos encontrar más números dentro de una cadena, podemos usar isNumericSpace
, otro útil StringUtils
método digno de mención. Comprueba si el String
contiene solo dígitos Unicode o espacios.
Comprobemos una cadena que contiene números y espacios:
String string = "25 50 15";
if (StringUtils.isNumericSpace(string)) {
System.out.println("String is numeric!");
} else {
System.out.println("String isn't numeric.");
}
Esto resulta en:
String is numeric!
Compruebe si la cadena es numérica con Regex
Aunque la mayoría de los desarrolladores se contentarán con usar un método ya implementado, a veces puede tener una verificación de patrones muy específica:
Te puede interesar:AWS S3 con Java: carga de archivos, creación y eliminación de buckets de S3public static boolean isNumeric(String string) {
// Checks if the provided string
// is a numeric by applying a regular
// expression on it.
String regex = "[0-9]+[\.]?[0-9]*";
return Pattern.matches(regex, string);
}
Y luego, podemos llamar a este método:
System.out.println("123: " + isStringNumeric2("123"));
System.out.println("I'm totally a numeric, trust me: " + isStringNumeric2("I'm totally a numeric, trust me"));
Ejecutar esto nos da el siguiente resultado:
123: true
I'm totally a numeric, trust me: false
Conclusión
En este artículo, hemos cubierto varias formas de verificar si una cadena es numérica o no (representa un número) en Java.
Comenzamos usando Core Java y capturando un NumberFormatException
, después de lo cual usamos la biblioteca Apache Commons. A partir de ahí, hemos utilizado StringUtils
y NumberUtils
clases para comprobar si una cadena es numérica o no, con varios formatos.