检查字符串是否为数字

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在 Java 中,字符串(string)是一种常用的数据类型,可以用于各种任务。它通常用于存储来自文本字段或文本区域的输入。确定这些输入是否为有效的数字数据非常重要。在本实验中,我们将学习在 Java 中检查字符串是否为有效数字的不同方法。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("`Java`")) -.-> java/StringManipulationGroup(["`String Manipulation`"]) java(("`Java`")) -.-> java/DataStructuresGroup(["`Data Structures`"]) java(("`Java`")) -.-> java/ProgrammingTechniquesGroup(["`Programming Techniques`"]) java(("`Java`")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["`Object-Oriented and Advanced Concepts`"]) java(("`Java`")) -.-> java/SystemandDataProcessingGroup(["`System and Data Processing`"]) java/StringManipulationGroup -.-> java/strings("`Strings`") java/StringManipulationGroup -.-> java/regex("`RegEx`") java/DataStructuresGroup -.-> java/collections_methods("`Collections Methods`") java/ProgrammingTechniquesGroup -.-> java/method_overloading("`Method Overloading`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("`Exceptions`") java/SystemandDataProcessingGroup -.-> java/string_methods("`String Methods`") subgraph Lab Skills java/strings -.-> lab-117415{{"`检查字符串是否为数字`"}} java/regex -.-> lab-117415{{"`检查字符串是否为数字`"}} java/collections_methods -.-> lab-117415{{"`检查字符串是否为数字`"}} java/method_overloading -.-> lab-117415{{"`检查字符串是否为数字`"}} java/exceptions -.-> lab-117415{{"`检查字符串是否为数字`"}} java/string_methods -.-> lab-117415{{"`检查字符串是否为数字`"}} end

使用解析方法检查数字字符串

解析是 Java 中确定字符串是否为数字的最简单且最佳的方法。Java 提供了不同的内置解析方法,例如 Integer.parseInt(String number)Double.parseDouble(String number)Float.parseFloat(String number)Long.parseLong(String number),它们充当相应的数字数据类型转换器。

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

运行代码的步骤:

  • 将代码保存为名为 NumericStringParser.java 的文件
  • 打开终端并导航到包含该文件的目录
  • 使用 javac NumericStringParser.java 编译代码
  • 使用 java NumericStringParser 运行代码

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

正则表达式可以用来匹配字符串并判断其是否为数字。我们使用字符串的 matches() 方法将字符串与正则表达式进行比较。为了匹配字符串,使用正则表达式 -?\\d+(\\.\\d+)?,其中 -? 表示数字是否为负数,\\d+ 用于查找字符串中的一个或多个数字,(\\.\\d+)? 用于匹配小数。在这里,\\. 用于查找小数点,\\d+ 用于查找小数点后的一个或多个数字。

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

运行代码的步骤:

  • 将代码保存为名为 NumericStringRegex.java 的文件
  • 打开终端并导航到包含该文件的目录
  • 使用 javac NumericStringRegex.java 编译代码
  • 使用 java NumericStringRegex 运行代码

使用 Apache Commons 库

Apache Commons 库提供了一些方法来检查字符串是否为数字。

NumberUtils.isCreatable() 方法

isCreatable() 方法是一种简单且方便的方法,用于检查字符串是否为数字。它还接受以 0x0X 开头的十六进制数字字符串、以 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));
}
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));
}
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));
}
StringUtils.isNumericSpace() 方法

isNumericSpace() 方法还会检查空格。如果字符串是 "19 8" 这样的类型,则此方法将返回 true。如果字符串仅由空格组成,它也会返回 true

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

总结

在本实验中,我们学习了多种在 Java 中检查字符串是否为数字的方法,以及如何使用它们。我们使用了内置的解析方法、正则表达式以及 Apache Commons 库来检查字符串是否为数字。

您可能感兴趣的其他 Java 教程