如何在 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 库也提供了一些检查数字字符串的方法。