1

私はこのようなcmdを持っています:

java Test -p 127.0.0.1:8080 -d D:\Desktop\temp.exe -o mingw -s 1024 -t 2000

-p, -dor ( , ,自体-sを除く) で引数を取得し、他の引数を破棄したい。-p-d-s

私は何時間も試しましたが、結果はありませんでした.誰かが私を助けることができますか?

arg[i] と arg[i+1] の方法を試しましたが、args が次のようになっている場合: -p -d xxx、ユーザーが -p 値を入力しない場合、この解決策は効果がなく、問題が発生します。

4

6 に答える 6

2

この正規表現を使用して-(\w) ([\w!@#$%^&*():\\/.]+) group[1]、フラグを含め、group[2]引数を含めます

于 2012-07-30T10:05:13.043 に答える
2

すべてのオプションが同じ形式の場合、args 配列を次の形式で-x valueグループに分割できます。-d 127.0.0.1:8080-d D:...

for(int i=0; i < args.length; i+=2){
    //group args
}

for each group in groups:
    if group[0].equals("-d"){
          //do something
    }
}

または、Java の既存の OptionParser ライブラリを見てください。Javaでコマンドライン引数を解析するには?

于 2012-07-30T10:06:06.727 に答える
1

このソリューションは、引数をマップに組み立てます。

public static void main(String[] args) {
  final Map<Character, String> am = new HashMap<Character, String>();
  for (int i = 0; i+1 < args.length; i++)
    if (args[i].matches("-[pds]") && !args[i+1].startsWith("-"))
      am.put(args[i].charAt(1), args[++i]);
  System.out.println(am);
}
于 2012-07-30T10:08:43.883 に答える
1

どうですか...

for(int i = 0; i < args.length; i+=2) { 
 if(args[i].equals("-p") {
   //args[i+1] is the value
 } 
 ... 
}

それは正規表現を使用しません、ええ:)

于 2012-07-30T10:05:10.213 に答える
0

引数は配列に入るので、これには正規表現は必要ありません。ループするだけです。

public static void main(String[] args) {
  Map<String, String> argsMap = new HashMap<String, String>();
  int i = 0;
  while(i < args.length - 1 && args[i].startsWith("-")) {
    argsMap.put(args[i].substring(1), args[++i]);
  }

  System.out.println("-p arg was " + argsMap.get("p"));
  // etc.
}
于 2012-07-30T10:14:10.310 に答える
0

ひとつの大きな表現ではなく、小さな表現をいろいろと作ってみてください。たとえば、-p 部分に一致する式は次のようになります: -p ?(.*?)(untested)。

于 2012-07-30T10:07:49.567 に答える