java-beginner.com ブログ

プログラミングを学習するブログ(Javaをメインに)

Stringクラスのmatchesメソッドを使う

投稿日:

最終更新日:2016年07月31日

アイキャッチ

こんにちは。「Javaを復習する初心者」です。

今回はStringクラスのmatchesメソッドを使いました。このメソッドは引数に正規表現を指定し、パターンを満たすかを判定するメソッドです。例えば、数値の入力させる場面で、入力した文字列が数値なのかどうかを判定する場合、matchesで判定することができます。

整数の場合

例えば、文字列が整数値であるかどうか判定したいとします。

目的に合う正規表現を考えます。「1」や「12」などの1ケタ以上の数字を許可します。なので「\d」を使うことにします。「\d」は定義済みの文字クラスで、0から9の一文字を表します。次に01や02は数値としないことにします。そうすると、「[1-9]+\\d*」がよさそうです。「[1-9]」は「1から9」の一文字、「+」は「直前の文字が1つ以上ある」ことを意味します。なので先頭の文字が0以外ということになります。また、「*」は、「直前の文字が0回以上」という意味です。なので、2ケタ以上の数値が判定できます。しかし、このままでは「0」が対象外になりますので、「(0|[1-9]+\\d*)」とします。「X|Y」で「XまたはY」を表します。最後に、符号ありにしましょう。「[+-]?(0|[1-9]+\\d*)」となります。「X?」で「Xが1または0回」を意味します。

以下はソースと実行結果です。

ソースコード

package stringTest;

public class HelloMatchInt {

    private static final String REGEX = "[+-]?(0|[1-9]+\\d*)";

    public static void main(String[] args) {

        test("a");
        test("+");
        test("1");
        test("+1");
        test("-1");
        test("0");
        test("2");
        test("34");
        test("01");
        test("012");

    }

    private static void test(String targetStr) {

        if (targetStr.matches(REGEX)) {
            int num = Integer.parseInt(targetStr);
            System.out.println(targetStr + "は整数値です。 -> " + num);
        } else {
            System.out.println(targetStr + "は整数値ではありません。");
        }

    }

}

結果

aは整数値ではありません。
+は整数値ではありません。
1は整数値です。 -> 1
+1は整数値です。 -> 1
-1は整数値です。 -> -1
0は整数値です。 -> 0
2は整数値です。 -> 2
34は整数値です。 -> 34
01は整数値ではありません。
012は整数値ではありません。

以上のように、判定できます。

小数の場合

小数は次の正規表現で良いと思います。

ソースコード

    private static final String REGEX = "[+-]?(0|[1-9]+\\d*)(\\.\\d+)?";

小数の部分を追加しています。小数点については、「.」自体が任意の文字を表すため、エスケープして「\.」にする必要があります。「(\\.\\d+)?」の箇所が小数点以下が1または0回ということになります。

以下はソースと実行結果です。

ソース

package stringTest;

public class HelloMatchDouble {

    private static final String REGEX = "[+-]?(0|[1-9]+\\d*)(\\.\\d+)?";

    public static void main(String[] args) {

        test("a");
        test("+");
        test("1");
        test("+1");
        test("-1");
        test("2");
        test("34");
        test("01");
        test("012");

        test("0a");
        test("0.");
        test("0");
        test("0.1");
        test("12.34");

    }

    private static void test(String targetStr) {

        if (targetStr.matches(REGEX)) {
            double num = Double.parseDouble(targetStr);
            System.out.println(targetStr + "は数値です。 -> " + num);
        } else {
            System.out.println(targetStr + "は数値ではありません。");
        }

    }

}

結果

aは数値ではありません。
+は数値ではありません。
1は数値です。 -> 1.0
+1は数値です。 -> 1.0
-1は数値です。 -> -1.0
2は数値です。 -> 2.0
34は数値です。 -> 34.0
01は数値ではありません。
012は数値ではありません。
0aは数値ではありません。
0.は数値ではありません。
0は数値です。 -> 0.0
0.1は数値です。 -> 0.1
12.34は数値です。 -> 12.34

今回挙げた正規表現は一例であり、不完全である可能性もありますので注意してください。