2017-02-21 7 views
0

次のコマンドライン引数があるかどうかを確認するにはどうすればいいですか?目録make =ホンダdesc by_count合計 - make =?コマンドライン引数でindexOf()を使用するにはどうすればよいですか?

私は

は私がなりたい...はので、私はこの配列にすべての引数を渡すが、I`maは少し今失われたように、アレイに対する一切のindexOf()はありません のString [] savedArgsを作成しましたmake =をコマンドライン引数で探すことができるので、適切な方法を使って自動車メーカーのリストを表示することができます。私ができることはcontains()を使って正確なマッチを探すことです(例えば:make = Hondaまたはmake = BMW)しかし、この方法で同じコードを何度も繰り返すことになります。

あなたが入力引数を自分で処理したい場合は、事前

+0

あなたは文字列の配列を持っているので、配列全体を繰り返して、個々の文字列をチェックすることができます。 'matches()'、 'indexOf'など必要なメソッドがあります。 [Apache Commons CLI](https://commons.apache.org/proper/commons-cli/)を使って、コマンドラインをより簡単に扱うことができます。 – Thomas

答えて

1

組み込みのindexOfまたはこれと似た方法がありません。 1つのオプションは次のようなものです:

final String makeArgPrefix = "make="; 
    Optional<String> makeArg = Stream.of(args) 
      .filter(arg -> arg.startsWith(makeArgPrefix)) 
      .findAny(); 
    makeArg.ifPresent(arg -> System.out.println(arg.substring(makeArgPrefix.length()))); 

ストリームを使用しているので、これはJava 8が必要です。コマンドライン引数でmake=Hondaでは、これはこれは、複数のコマンドライン引数がname=で始まる可能性が考慮されていません

Honda 

を印刷します。それはあなたの正確な要求に応じて洗練されることができます。

コマンドライン引数の標準的な解釈は、それらをすべて左から右に処理することを許可します(いくつか無視したくない場合には分かりやすいことです)。何かのように

for (String arg : args) { 
    if (arg.equals("desc") { 
     ascending = false; 
    } else if (arg.startsWith(makeArgPrefix) { 
     make = arg.substring(makeArgPrefix.length()); 
    } else if // and so on 

} 

もちろん、あなたの特定の状況に最適な方法でください。

+0

恐ろしいです!ありがとう!! – Fodrigoal

1

のおかげで、あなたはそれぞれの引数は、あなたの引数名の部分文字列が含まれているかどうかを確認(「=作る」)と、文字列を分割することができます:

String make = ""; 
for (String arg : savedArgs) { 
    if (arg.contains("make=")) { 
     make = arg.split("make=")[1]; 
    } 
} 

必要に応じて各引数について繰り返します。

もっと良い解決策はApache Commons CLIです。

+0

またはgetoptを使用してください:https://www.gnu.org/software/gnuprologjava/api/gnu/getopt/Getopt.html –

関連する問題