【Java】数値に変換できる文字列であるかどうかを確認する

Stringで取ってきたけどそれが数字のみの文字列かどうかを判断したい。

public boolean isNumberStr(String hoge) {
try {
Integer.parseInt(hoge);
return true;
} catch (NumberFormatException e) {
return false;
}
}

ストレートに組むとこうなる。
でも意図的にException発生させるっていうのが気持ち悪いなと思った。

public boolean isNumberStr(String hoge) {
Pattern p = Pattern.compile(“^[0-9]+$”);
Matcher m = p.matcher(hoge);
return m.find();
}

正規表現を使う場合、そういった気持ち悪さはなくなる。
ただ、私が正規表現苦手というのもあるけど、やっぱり正規表現って読み辛い。
ぶっちゃけこれで正しく判定できてるかも自信ない(テストしていません)。
間違ってたら恥ずかしいのでテストしてからPostしようとも思ったけど、この記事を書いてる環境にはJava開発環境を用意していないので、面倒臭い。

Integer.parseInt()を用いると、int型で扱えるもののみっていうのがわかりやすい。 つまり整数のみ。小数点はダメ。
小数点を含む数値にしたいなら、parseする場合は、double.parseDouble()にでもしてやればいい。でも正規表現だと・・・。

ひよっこプログラマーでもint型とかdouble型とかが扱える桁数はわかる。
正規表現を読み取るのは、正規表現を勉強しないと無理。そういった観点だと、意図的にException発生って気持ち悪いけど、やっぱりそっちの方が無難かな。

コメント

  1. 匿名 より:

    ふつーに

    Foreach c : str
    if ‘0’ <= c && '9' <= c
    Ok

    でよいのでは?
    スマホで書いてるからJavaの文法にはなってないけどフラグ立てて一つでも該当しない文字が現れたらfalseを返す、いやフラグいらないか、メソッドにして数値にならないのが見つかった時点で直ちにfalseをリターンする。

    文字の集合はsetで表してもよいかも。

  2. 匿名 より:

    それと正規表現はマジ習得しておくべき。スクリプト系言語が人気な要因の一つは正規表現にあると言っても過言ではないほどの便利機能。

  3. 匿名 より:

    ↑激しく同意
    正規表現はちゃんと勉強しなきゃだめ。
    ドラクエでもバカだけど、こっちもあまりお利口じゃないんだね。

  4. じょい より:

    複垢でマラソンしてるんだから
    そりゃオツムは弱めですよw

  5. 匿名 より:

    Javaの環境は別にローカルに入れておく必要はないですよ。ideone.com とかオンラインのIDEがあって簡単なプログラムならそこで実行もできます。

コメントを残す