Java で文字列が数字かどうかを調べる方法

Mohammad Irfan 2023年10月12日
  1. Java で文字列が数値かどうかを調べる
  2. Java の Character クラスを使って文字列が数値であるかどうかを調べる
  3. Java の Apache ライブラリを使って文字列が数字かどうかを調べる
  4. Java の Double クラスを使って文字列が数値かどうかを調べる
  5. Java 8 で文字列が数値かどうかを調べる
Java で文字列が数字かどうかを調べる方法

このチュートリアルでは、Java で文字列が数値であるかどうかをチェックする方法を紹介し、それを理解するためのコード例をいくつか挙げています。

数値文字列をチェックするには、正規表現を使用する方法、Double クラス、Character クラス、Java 8 の関数的アプローチなど、いくつかの方法があります。

Java で文字列が数値かどうかを調べる

文字列は、数値(有効な数字)を含む場合にのみ数値です。例えば、"123"は有効な数値文字列であるが、"123a"はアルファベットを含むので有効な数値文字列ではありません。

数値文字列をチェックするには、String クラスの matched() メソッドを利用します。これは regex を引数にとり、true または false のいずれかのブール値を返すものです。

public class SimpleTesting {
  public static void main(String[] args) {
    String str = "123";
    boolean isNumeric = str.matches("[+-]?\\d*(\\.\\d+)?");
    System.out.println(isNumeric);
    str = "121xy";
    isNumeric = str.matches("[+-]?\\d*(\\.\\d+)?");
    System.out.println(isNumeric);
    str = "0x234";
    isNumeric = str.matches("[+-]?\\d*(\\.\\d+)?");
    System.out.println(isNumeric);
  }
}

出力:

true
false
false

Java の Character クラスを使って文字列が数値であるかどうかを調べる

ループ内の各文字を調べるには、Character クラスの isDigit() メソッドを用いることができます。これは truefalse のどちらかの値を返します。

public class SimpleTesting {
  public static void main(String[] args) {
    String str = "1123";
    boolean isNumeric = true;
    for (int i = 0; i < str.length(); i++) {
      if (!Character.isDigit(str.charAt(i))) {
        isNumeric = false;
      }
    }
    System.out.println(isNumeric);
  }
}

出力:

true

Java の Apache ライブラリを使って文字列が数字かどうかを調べる

Apache を使用している場合は、StringUtils クラスの isNumeric() メソッドを使用することができます。

import org.apache.commons.lang3.StringUtils;

public class SimpleTesting {
  public static void main(String[] args) {
    String str = "1123";
    boolean isNumeric = StringUtils.isNumeric(str);
    System.out.println(isNumeric);
    str = "123xyz";
    isNumeric = StringUtils.isNumeric(str);
    System.out.println(isNumeric);
  }
}

出力:

true
false

Java の Double クラスを使って文字列が数値かどうかを調べる

文字列を double に変換して double 型の値を返す Double クラスの parseDouble() メソッドを利用することができます。解析できなかった場合は例外をスローします。

public class SimpleTesting {
  public static void main(String[] args) {
    String str = "1123";
    try {
      Double.parseDouble(str);
      System.out.println("It is a numerical string");
    } catch (NumberFormatException e) {
      System.out.println("It is not a numerical string");
    }
  }
}

出力:

It is a numerical string

Java 8 で文字列が数値かどうかを調べる

Java 8 以上のバージョンを使っている場合は、この例を使って数値文字列を調べることができます。ここでは、Character クラスの isDigit() メソッドを allMatch() にメソッド参照として渡しています。

public class SimpleTesting {
  public static void main(String[] args) {
    String str = "1123";
    boolean isNumeric = str.chars().allMatch(Character::isDigit);
    System.out.println(isNumeric);
    str = "ab234";
    isNumeric = str.chars().allMatch(Character::isDigit);
    System.out.println(isNumeric);
  }
}

出力:

true
false

関連記事 - Java String