Java: compruebe si la cadena es un número

    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:

    Te puede interesar:Configurar el registro cerrado para proyectos Spring Boot con Github y Jenkins
    • 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 cadena
    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.

    Te puede interesar:Cómo formatear el número como cadena de moneda en Java

    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:

    Te puede interesar:Cómo formatear una cadena en Java con ejemplos
    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ásico
    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:

    Te puede interesar:Comparando cadenas con Java
    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:

    Te puede interesar:AWS S3 con Java: carga de archivos, creación y eliminación de buckets de S3
    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.

     

    Rate this post

    Etiquetas: