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.



