Stringクラスのmatchesメソッドを使う
こんにちは。「Javaを復習する初心者」です。今回はStringクラスのmatchesメソッドを使いました。このメソッドは引数に正規表現を指定し、パターンを満たすかを判定するメソッドです。
例えば、数値の入力させる場面で、入力した文字列が数値なのかどうかを判定する場合、matchesで判定することができます。
整数の場合
例えば、文字列が整数値であるかどうか判定したいとします。
目的に合う正規表現を考えます。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
今回挙げた正規表現は一例であり、不完全である可能性もありますので注意してください。