• ベストアンサー

コマンドライン引数のチェック

args[]ってString型の配列変数ですよね? たとえば、 コマンドライン引数で数字を受け取って演算するために Stringからint等の数値に変換するとします。 Integer.ParseInt()を使うと、もし数字ではない引数 だったときに例外処理が発生します。 事前に文字か数字がチェックする方法はあるのでしょうか? それとも例外処理で対応するしかないのでしょうか?

noname#62349
noname#62349
  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • takaP-
  • ベストアンサー率79% (83/105)
回答No.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){     // 整数置き換え不可の場合の処理   } } と、かなり簡潔に記述する事が出来ます。 私ならば後者を取りますね。

noname#62349
質問者

お礼

わざわざありがとうございました。 とっっっってもためになりました!!!! これからもtakaP-さんのような Javaマスター目指して精進しますね(^o^)/~

その他の回答 (1)

  • takaP-
  • ベストアンサー率79% (83/105)
回答No.1

>事前に文字か数字がチェックする方法はあるのでしょうか? 様々な方法があると思います。 一番オーソドックスなのは、文字列 args[0] のキャラクタ を一つ一つ調べていく方法だと思います。 StringクラスのcharAt()で取り出してから、それをCharacter クラスのクラスメソッドisDigit()で数値かどうか調べるとか。 別の方法として正規表現を使う事も可能です(J2SDK1.4以上) Stringクラスのmatches()メソッドを使って、 String s=args[0] ; boolean flag=s.matches("[0-9]++") ; と、判定する事も出来ます。 けれど、最もJavaらしい方法は例外で受ける方法ではない かと思います。 例外と聞くとイメージが悪いかもしれませんが、別に避ける 必要はないですし、大いに活用してみてはどうでしょうか?

noname#62349
質問者

お礼

ありがとうございます。 String s=args[0] ; boolean flag=s.matches("[0-9]++") ; というのを使ってできました(^o^) 例外処理も活用してみます。 できればで結構ですが StringクラスのcharAt()で取り出してから、それをCharacter クラスのクラスメソッドisDigit()で数値かどうか調べる という方の具体的なコーディング例などありますか? ドキュメント調べたら charAt()のパラメタはindexを指定するとありましたが コマンドライン引数の場合どういう風に 指定したらよいのかいまいちわかりませんでした。。。

関連するQ&A

  • コマンドライン引数を用いて。

    コマンドライン引数を用いて足し算をさせるプログラムです。 class goukei{ public static void main(String args[]){ int i, count; int sum = 0; int a[]; count = args.length; for(i=0; i<args.length; i++){ int arg_i = Integer.parseInt(args[i]); sum = sum + arg_i; } System.out.println("引数の数は" + count); System.out.println("合計は" + sum); } } と考えたのですが、もっとこうしたほうがいいという部分があれば教えてください。 一応これでできているとは思うのですがイマイチ自信がありません・・・。

    • ベストアンサー
    • Java
  • コマンドライン引数の*(アフタリスク)の表示について教えて下さい

    皆様どうぞよろしくお願い申し上げます。アドバイス下さい。 java言語で質問です。調べたかぎりわからないことが起こりました。次のものです。コマンドライン引数で引数1は数字、引数2は数字、引数3は* で表示させるプログラムを作りました。引数3番目の演算子*(アフタリスク)を表示する場合にうまく表示できません。 C:\java>java test 2.0 15.0 * 2.0 15.0 Calculation.class ←表示されません。 プログラムは以下のものを作りました。見てください。 /** * 実行クラス:引数テストクラス */ class test{ public static void main(String args[]) { //引数を取得 double num1 = Double.parseDouble(args[0]); //引数1(数値) double num2 = Double.parseDouble(args[1]); //引数2(数値) String kigou = args[2]; //引数3(計算記号) //画面に出しています。 System.out.println(num1); System.out.println(num2); System.out.println(kigou); } }

  • コマンドライン引数 java

    学校で、2進数表記された文字列number1、number2…numberNを数値に変換し、合計を算出し、2進数表記の文字列に変換した結果を出力するプログラムを組む課題が出ました。 java Lesson06 number1 number2 … numberN の形式で受け取ったコマンドライン引数を元に、処理を行います。 ※number1からnumberNは、全て0か1のみで構成されている文字列 * 文字列の加算 * System.outまたはSystem.errのprint系メソッドで、Stringの値を受け取るもの以外 * Integerなどのラッパークラス * DecimalFormatなどの書式変換クラス 上記の機能は使ってはいけません。 ---- class Lesson{  public static void main(String args[]){   int sum;   for(int i = 1; i < args.length; i ++) {    int len = strlen(args[i]);//※    for(int j = 0; j < len; j ++) {     if(args[i][len - j - 1] == "1") {//※      sum = pow(2, j) + sum;//※     }    }   }  } } ---- とりあえず、与えられた二進数を計算する部分まで作ってみたのですが、※の部分でエラーが出てしまいます。 コマンドライン引数もよく分からなくて困っているので、教えていただければ助かります。 以上よろしくお願いいたします。

    • ベストアンサー
    • Java
  • javaのコマンドライン引数について

    このプログラムをベースにして、配列をコマンドライン引数で渡せるようにしたいのですが、どうすれば良いのでしょうか。教えてください。 public class Test { public static void main(String[] args){ int[] numbers = {14,8,1,5,0,2,2,5,8,50}; System.out.print("配列中の最大値:"+maxNumber(numbers)); } static int maxNumber(int[] numbers){ int max = 0; for(int i=0; i<numbers.length;i++){ if(max < numbers[i]){ max = numbers[i]; } } return max; } }

    • ベストアンサー
    • Java
  • 拡張for文の型変換について

    Javaでプログラミングを勉強しております。 拡張for文で変数宣言をする時についての質問です。 argsに数字を入れてString型をInt型に変換する時、変数宣言はどう書けばいいのでしょうか? 拡張for文に入れる前に Int num = Integer.parseInt(args[0]); と宣言してから for(int num : array){ 処理 } とするのか for(int num : array){ num = Integer.parseInt(args[0]) …ほかの処理 } みたいにfor文の中に埋め込むのか分かりません。 argsのString型を拡張for文でInt型にするにはどう書いたらいいでしょうか

  • for文を使った累乗の計算方法について

    質問させてください。 for文を使った累乗の計算プログラムを作っています。 数値はコマンドライン引数から取得し、0番目の数字を i番目の数字分累乗するというものです。 ソースを途中まで作成したのですが、0乗した場合のプログラムが よく分かりません。どなたか教えていただけないでしょうか? public class Mondai { public static void main(String[] args) { //変数の初期化 int k = 0; if ( 2 <= args.length && args.length < 3) { //コマンドライン引数の数だけ配列を用意する int[] num = new int[args.length]; //0,1番目のコマンドライン引数を整数に変換してnumに代入する num[0] = Integer.parseInt(args[0]); k = num[0]; k *= k; num[1] = Integer.parseInt(args[1]); //num[1]の掛け算をnum[1]回繰り返す for (int i = 0; i < num[1] -2; i++) { k *= num[0]; } System.out.println("\"" + num[0] +"の" + num[1] + "乗は"+ k + "\""); if(num[1] == 0) { System.out.println("\"" + num[0] +"の" + num[1] + "乗は1\""); } //args.length <= 1の条件の時 } else if(args.length <= 1) { System.out.println("引数が足りないため累乗の計算ができません。"); //指定された条件以外の時 } else { System.out.println("引数が多すぎるため累乗の計算ができません。"); } } }

    • ベストアンサー
    • Java
  • コマンドライン引数はどこからやって来たのですか?

    こんにちは Javaで、 public static void main(String args[]) という引数は、どこからやって来たのでしょうか? これがコマンドラインに初めて書かれる文だとしたら、どこから引数を貰うのでしょうか? また、2番目に書いたクラスだったとしても、他のクラスのなかのものをそんな簡単に貰うことはできるのでしょうか? もし宜しければ回答お願い致します。

    • ベストアンサー
    • Java
  • 【Java】複数の引数の数値と文字列の判定

    Javaについてです。 コマンドライン引数を複数渡し、渡ってきた値が数字のみの場合は、数値*数値の文字数を出力し 数字のみでない場合は文字列を逆から1文字ずつ出力する。 数値の判定はtry/catchで行い、catchメソッドには「stringFlg = true;」のみにする。 というプログラムを作りたいのですが、 引数が1つの時は上手くいくのですが、11 2あ あ3 44を渡した場合、 22 あ 2 3 あ 88 と出るはずが、 22 1 1 あ 2 3 あ 4 4 と出てしまいます…。 どうしたら全ての引数を正しく表示出来るのでしょうか?教えて下さい。 現時点のソースコードです。 public class Test { public static void main(String[] args) { boolean stringFlg = false; try { if(StringUtils.isNumeric(args[0])){ for(String arg : args) { int num = Integer.parseInt(arg); System.out.println(num * arg.length()); } } else{ stringFlg = true; } } catch (NumberFormatException e) { stringFlg = true; } if(stringFlg){ for(String val : args) { String[] str = val.split(""); for(int i = str.length-1; i >= 0; i--){ System.out.println(str[i]); } } } } }

    • ベストアンサー
    • Java
  • コマンドラインがわかりません!!

    (質問) (1)コマンドラインというのがわかりません。 (2)下の説明のところが全部わかりません。 よろしくおねがいします!! -------------------------------------------------- (説明) ファイルを処理するとき、ファイル名指定はコマンドラインから行うのが便利です。Javaではコマンドライン引数はmain( )メソッドの引数として次のように用意されています。 public static void main (String args[ ]) { ・・・・・ } このargs引数を使うと、コマンドラインから入力されたパラメーターを次のように取得できます。 最初のパラメーター文字列は0です。 args.length args[0] args[1] args [2]  ・  ・  ・

    • ベストアンサー
    • Java
  • mainメソッドの引数は何を表す?

     基本的なことで恐縮ですが、mainメソッドの引数は何を表すのでしょうか? コンソールアプリケーションでは(String args[])が、GUIアプリケーションでは(Graphics g)のようなものが入っていますが、これは何なのでしょう?  String args[]のほうは、コマンドライン引数を格納するための変数だと解説書に書いてあったのですが、mainがどうしてコマンドライン引数や、あるいはGraphics g に対して、処理を行う(?)のかがわかりません。  よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう