Java: compruebe si la cadena es un número

J

Introducción

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:

true

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.

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:

String 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 StringUtilsmé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:

public 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.

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con tus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad