如何在 Java 中检查字符串是否为数字?

原文:https://www.studytonight.com/java-examples/how-to-check-if-a-string-is-numeric-in-java

字符串是一种非常常用的数据类型,可以用于各种任务。每当我们从文本字段或文本区域获取输入时,输入总是一个字符串。假设我们需要检查来自文本字段的输入是否是有效的数字。

在本教程中,我们将学习如何检查字符串是否是有效的数字。

通过分析检查字符串是否为数字

解析字符串可能是判断字符串是否是数字的最简单也是最好的方法。一些常见的内置解析方法如下所示。

  • 整数.解析整数(字符串数)
  • Double.parseDouble(字符串数字)
  • Float.parseFloat(字符串编号)
  • 长.秒长(字符串数)

这些方法将解析字符串,并将其转换为相应的数字数据类型(如 Double 或 Integer)。

如果这些方法没有抛出 NumberFormatException ,那么我们可以放心地假设这个字符串是数字。

请注意,如果传递空字符串,这些方法将抛出**NullPointerException**。下面的代码演示了这个场景。

public static void main(String[] args)
{
    String num = null;
    Double d = Double.parseDouble(num);
}

在 Java . base/JDK . internal . math . floating decimal . readjavaformatstring(floating decimal . Java:1838)处的线程“main”Java . lang . nullpointerexception 在 Java . base/JDK . internal . math . floating decimal . parsedouble(floating decimal . Java:110)处的异常 在 Java . base/Java . lang . double . parsedouble(double . Java:549)处的异常 在 numericstring . main(numericstring)处的异常

示例:使用 parseDouble()方法

让我们使用 parseDouble()方法编写自己的方法。我们将使用试捕块来检测和捕捉NumberFormatException。如果引发此异常,则该方法应返回 false。

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));    
}

字符串 1001 为数字:真 字符串-101 为数字:真 字符串 1a10 为数字:假 字符串 null 为数字:假

使用正则表达式检查字符串是否为数字

我们可以编写正则表达式来匹配字符串,并判断它们是否是数字。我们将使用字符串的 matches()方法来比较字符串数字和正则表达式。我们将使用正则表达式 "-?\d+(\。\d+)?”匹配字符串。让我们试着理解这个正则表达式。

  • -?regex 的一部分通过查找连字符或减号(-),检查 is 数字是否为负数。问号用于使连字符的出现成为可选的,因为数字也可以是正数。
  • \d+ 搜索字符串中的一个或多个数字。
  • (\。\d+)?用于匹配带有十进制数字的数字。\.搜索小数点,\d+查找小数点后的一个或多个数字。结尾的问号表示括号内的整个正则表达式部分是可选的,因为数字可能不是小数。

我们还需要确保字符串不为空,以避免出现NullPointerException

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));    
}

字符串 1001 为数字:真 字符串-101 为数字:真 字符串 1a10 为数字:假 字符串 null 为数字:假

使用 Apache 公共库检查字符串是否为数字

Apache Commons 库提供了一些不同的方法,可以直接用来检查字符串是否是数字。让我们分别看每一个。

NumberUtils.isCreatable()方法

isCreatable()是一种简单方便的方法,可用于检查字符串是否为数字。它还接受以 0x 或 oX 开头的十六进制数字字符串、以 0 开头的八进制数字、使用字母 e 的科学符号,并且还接受用类型限定符标记的数字。

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));
}

字符串 a10c 为数字:假 字符串-104 为数字:真 字符串 100 为数字:真 字符串 0xA10 为数字:真

NumberUtils.isParsable()方法

如前一节所述,如果一个字符串是可解析的,那么它就是一个数字字符串。isParsable()方法用于检查字符串是否可解析。它不能使用十六进制数字或科学符号,如 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));
}

字符串 a10c 为数字:假 字符串-104 为数字:真 字符串 100 为数字:真 字符串 0xA10 为数字:假

StringUtils.isNumeric()方法

也可以使用 isNumeric()方法,但是它比其他方法稍微不太灵活。它将只检查 Unicode 数字,如果数字字符串表示负数或包含小数点,它将返回 false。所以这个方法只有在我们只是检查正整数的情况下才应该考虑。

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));
}

字符串 a10c 为数字:假 字符串-104 为数字:假 字符串 100 为数字:真 字符串 0.11 为数字:假

StringUtils.isNumericSpace()方法

isNumericSpace()类似于 isNumeric()方法。唯一的补充是 isNumericSpace()也会检查空间。如果字符串的类型是“19 8”,那么这个方法将返回 true。如果字符串仅由空格组成,它也将返回 true。

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));
}

字符串 a10c 为数字:假 字符串为数字:假 字符串 100 为数字:真 字符串 0.11 为数字:假

摘要

有多种方法可以检查字符串是否为数字。我们可以解析这个字符串,如果我们没有得到一个数字格式异常,那么它就是一个数字字符串。我们还可以使用正则表达式和 matches()方法来检查数字字符串。Apache Commons 库也提供了一些检查数字字符串的方法。