Verificando se uma String é Numérica

JavaBeginner
Pratique Agora

Introdução

Em Java, uma string é um tipo de dado frequentemente utilizado que pode ser usado para diversas tarefas. Ela é frequentemente usada para armazenar a entrada de um campo de texto ou área de texto. É importante determinar se a entrada dessas fontes é um dado numérico válido. Neste laboratório, aprenderemos diferentes maneiras de verificar se uma string é um número válido em Java.

Usando o Método de Parsing para Verificar Strings Numéricas

O parsing (análise sintática) é o método mais fácil e melhor para determinar se uma string é numérica em Java. Java fornece diferentes métodos de parsing embutidos, como Integer.parseInt(String number), Double.parseDouble(String number), Float.parseFloat(String number) e Long.parseLong(String number), atuando como conversores de tipo de dado numérico correspondentes.

public static boolean isStringNumeric(String number) {
    boolean isNumeric;
    if(number == null) {
        isNumeric = false;
    } else {
        try {
            Double num = Double.parseDouble(number);
            isNumeric = true;
        } catch(NumberFormatException e) {
            isNumeric = false;
        }
    }
    return isNumeric;
}
public static void main(String[] args) {
    String num1 = "1001";
    String num2 = "-101";
    String num3 = "1a10";
    String num4 = null;

    System.out.println("String " + num1 + " is numeric: " + isStringNumeric(num1));
    System.out.println("String " + num2 + " is numeric: " + isStringNumeric(num2));
    System.out.println("String " + num3 + " is numeric: " + isStringNumeric(num3));
    System.out.println("String " + num4 + " is numeric: " + isStringNumeric(num4));
}

Para executar o código:

  • Salve o código em um arquivo chamado NumericStringParser.java
  • Abra o terminal e navegue até o diretório que contém o arquivo
  • Compile o código usando javac NumericStringParser.java
  • Execute o código usando java NumericStringParser

Usando Expressões Regulares para Verificar Strings Numéricas

Expressões regulares (regular expressions) podem ser usadas para corresponder uma string e determinar se ela é numérica ou não. Usamos o método matches() das strings para comparar o número da string com expressões regulares. Para corresponder strings, a regex "-?\\d+(\\.\\d+)?" é usada, onde -? denota se o número é negativo ou não, \\d+ procura por um ou mais dígitos na string, e (\\.\\d+)? é usado para corresponder números decimais. Aqui, o \\. procura pelo ponto decimal, e \\d+ procura por um ou mais dígitos após o ponto decimal.

public static boolean isStringNumeric(String number) {
    boolean isNumeric;
    String regex = "-?\\d+(\\.\\d+)?";
    if(number == null) {
        isNumeric = false;
    } else if(number.matches(regex)) {
        isNumeric = true;
    } else {
        isNumeric = false;
    }
    return isNumeric;
}
public static void main(String[] args) {
    String num1 = "1001";
    String num2 = "-101";
    String num3 = "1a10";
    String num4 = null;
    System.out.println("String " + num1 + " is numeric: " + isStringNumeric(num1));
    System.out.println("String " + num2 + " is numeric: " + isStringNumeric(num2));
    System.out.println("String " + num3 + " is numeric: " + isStringNumeric(num3));
    System.out.println("String " + num4 + " is numeric: " + isStringNumeric(num4));
}

Para executar o código:

  • Salve o código em um arquivo chamado NumericStringRegex.java
  • Abra o terminal e navegue até o diretório que contém o arquivo
  • Compile o código usando javac NumericStringRegex.java
  • Execute o código usando java NumericStringRegex

Usando a Biblioteca Apache Commons

A biblioteca Apache Commons fornece alguns métodos para verificar se uma string é numérica ou não.

Método NumberUtils.isCreatable()

O método isCreatable() é um método simples e conveniente para verificar se uma string é numérica. Ele também aceita strings numéricas de números hexadecimais que começam com 0x ou 0X, números octais que começam com 0, notações científicas que usam a letra e, e também aceita números marcados com um qualificador de tipo.

import org.apache.commons.lang3.math.NumberUtils;
public static void main(String[] args) {
    String num1 = "a10c";
    String num2 = "-104";
    String num3 = "100";
    String num4 = "0xA10";

    System.out.println("String " + num1 + " is numeric: " + NumberUtils.isCreatable(num1));
    System.out.println("String " + num2 + " is numeric: " + NumberUtils.isCreatable(num2));
    System.out.println("String " + num3 + " is numeric: " + NumberUtils.isCreatable(num3));
    System.out.println("String " + num4 + " is numeric: " + NumberUtils.isCreatable(num4));
}
Método NumberUtils.isParsable()

O método isParsable() é usado para verificar se uma string é analisável (parsable) ou não. Ele não pode trabalhar com números hexadecimais ou notações científicas como o método isCreatable().

import org.apache.commons.lang3.math.NumberUtils;
public static void main(String[] args) {
    String num1 = "a10c";
    String num2 = "-104";
    String num3 = "100";
    String num4 = "0xA10";

    System.out.println("String " + num1 + " is numeric: " + NumberUtils.isParsable(num1));
    System.out.println("String " + num2 + " is numeric: " + NumberUtils.isParsable(num2));
    System.out.println("String " + num3 + " is numeric: " + NumberUtils.isParsable(num3));
    System.out.println("String " + num4 + " is numeric: " + NumberUtils.isParsable(num4));
}
Método StringUtils.isNumeric()

O método isNumeric() verifica dígitos Unicode e retorna false se a string numérica denota um número negativo ou contém um ponto decimal. Este método só deve ser considerado se estivermos apenas verificando inteiros positivos.

import org.apache.commons.lang3.StringUtils;
public static void main(String[] args) {
    String num1 = "a10c";
    String num2 = "-104";
    String num3 = "100";
    String num4 = "0.11";

    System.out.println("String " + num1 + " is numeric: " + StringUtils.isNumeric(num1));
    System.out.println("String " + num2 + " is numeric: " + StringUtils.isNumeric(num2));
    System.out.println("String " + num3 + " is numeric: " + StringUtils.isNumeric(num3));
    System.out.println("String " + num4 + " is numeric: " + StringUtils.isNumeric(num4));
}
Método StringUtils.isNumericSpace()

O método isNumericSpace() também verifica espaços. Se uma string for do tipo "19 8", então este método retornará true. Ele também retornará true se a string for composta apenas por espaços em branco.

import org.apache.commons.lang3.StringUtils;
public static void main(String[] args) {
    String num1 = "a10c";
    String num2 = "  ";
    String num3 = "100";
    String num4 = "0.11";

    System.out.println("String " + num1 + " is numeric: " + StringUtils.isNumeric(num1));
    System.out.println("String " + num2 + " is numeric: " + StringUtils.isNumeric(num2));
    System.out.println("String " + num3 + " is numeric: " + StringUtils.isNumeric(num3));
    System.out.println("String " + num4 + " is numeric: " + StringUtils.isNumeric(num4));
}

Resumo

Neste laboratório, aprendemos várias maneiras de verificar se uma string é numérica em Java e como usá-las. Usamos o método de parsing (análise) embutido, expressões regulares e a biblioteca Apache Commons para verificar se uma string é numérica ou não em Java.