dポイントプレゼントキャンペーン実施中!

args[]ってString型の配列変数ですよね?

たとえば、
コマンドライン引数で数字を受け取って演算するために
Stringからint等の数値に変換するとします。

Integer.ParseInt()を使うと、もし数字ではない引数
だったときに例外処理が発生します。
事前に文字か数字がチェックする方法はあるのでしょうか?

それとも例外処理で対応するしかないのでしょうか?

A 回答 (2件)

>StringクラスのcharAt()で取り出してから、それをCharacter


>クラスのクラスメソッドisDigit()で数値かどうか調べる
>という方の具体的なコーディング例などありますか?

本当ならば、メソッドを作った方が良いのかもしれませんが、
コマンドライン引数と云う事なので敢えてしません。

public static void main(String[] args){
  if(args.length > 0){
    boolean flag=true;
    for(int i=0 ; i<args[0].length() ; i++){
      flag=Character.isDigit(args[0].charAt(i));
      if(flag){
        continue;
      else {
        break;
      }
    }
    if(flag){
      Integer.parsInt(args[0]);
    else {
      // 整数置き換え不可の場合の処理
    }
  }
  else {
    // 引数無しの場合の処理
  }
}

適当ですが、こういう感じです。
これを、例外処理で置き換えると、

public static void main(String[] args){
  try {
    Integer.parseInt(args[0]);
  }
  catch(ArrayIndexOutOfBoundsException e1){
    // 引数無しの場合の処理
  }
  catch(NumberFormatException e2){
    // 整数置き換え不可の場合の処理
  }
}

と、かなり簡潔に記述する事が出来ます。
私ならば後者を取りますね。
    • good
    • 0
この回答へのお礼

わざわざありがとうございました。
とっっっってもためになりました!!!!

これからもtakaP-さんのような
Javaマスター目指して精進しますね(^o^)/~

お礼日時:2003/03/06 17:39

>事前に文字か数字がチェックする方法はあるのでしょうか?



様々な方法があると思います。
一番オーソドックスなのは、文字列 args[0] のキャラクタ
を一つ一つ調べていく方法だと思います。
StringクラスのcharAt()で取り出してから、それをCharacter
クラスのクラスメソッドisDigit()で数値かどうか調べるとか。

別の方法として正規表現を使う事も可能です(J2SDK1.4以上)
Stringクラスのmatches()メソッドを使って、

String s=args[0] ;
boolean flag=s.matches("[0-9]++") ;

と、判定する事も出来ます。

けれど、最もJavaらしい方法は例外で受ける方法ではない
かと思います。
例外と聞くとイメージが悪いかもしれませんが、別に避ける
必要はないですし、大いに活用してみてはどうでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます。

String s=args[0] ;
boolean flag=s.matches("[0-9]++") ;

というのを使ってできました(^o^)
例外処理も活用してみます。

できればで結構ですが
StringクラスのcharAt()で取り出してから、それをCharacter
クラスのクラスメソッドisDigit()で数値かどうか調べる
という方の具体的なコーディング例などありますか?

ドキュメント調べたら
charAt()のパラメタはindexを指定するとありましたが
コマンドライン引数の場合どういう風に
指定したらよいのかいまいちわかりませんでした。。。

お礼日時:2003/03/05 11:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています