Проверка, является ли строка числовой

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В Java строка - это часто используемый тип данных, который может использоваться для различных задач. Она часто используется для хранения ввода из текстового поля или текстовой области. Важно определить, является ли ввод из этих источников допустимыми числовыми данными. В этом лабораторном задании мы узнаем разные способы проверить, является ли строка допустимым числом в 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() строк для сравнения строкового числа с регулярными выражениями. Для сопоставления строк используется regex "-?\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() - это простой и удобный метод для проверки, является ли строка числовой. Он также принимает числовые строки шестнадцатеричных чисел, начинающихся с 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));
}
Метод 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.