2012-04-18 29 views
0

例如,用戶運行我的程序是這樣如何解析java中的命令參數?

myprogram -p1 my_name, -p2 my_address, -p3 my_gender

但用戶可以鍵入此,它仍然有效:

myprogram -p2 my_address, -p1 my_name,-p3 my_gender

我如何解析它在Java中?謝謝。

+0

結帳這個答案庫做http://stackoverflow.com/a/1524690/898289,或者只是去管它,檢查每個args數組,你在主得到的(字串[] args) ... – Adam 2012-04-18 10:07:19

+0

[用於解析命令行參數的Java庫的可能的重複?](http://stackoverflow.com/questions/1200054/java-library-for-parsing-command-line-parameters) – 2012-04-18 10:07:23

+0

http:// stackoverflow.com/questions/3309250/command-line-parsing-commons-cli-alternatives – assylias 2012-04-18 10:08:06

回答

1

您可以使用這樣的事情:

public static void main (String[] args) { 
     for(int i = 0; i < args.length; i++) { 

       if(args[i].equals("-p1")) { 
        // args[i+1] contains p1 argument 

       } else if(args[i].equals("-p2")) { 
        // args[i+1] contains p2 argument 
       } 

     } 
} 

一定要檢查第i + 1點的參數是否是存在的,否則會拋出異常。

有更高級的方法可以做到這一點,你可以例如使用散列將標誌映射到處理函數。但是,爲了這個目的,我想這會做。

我不明白的是在你的示例中使用逗號。他們用於什麼?

-3

Java Tutorials @Oracle

public static void main (String[] args) { 
    for (String s: args) { 
     System.out.println(s); 
    } 
} 

進來字符串的載體中的樣品PARAMS。

+5

矢量字符串,真的嗎? – Adam 2012-04-18 10:08:57

+0

它是一種有效的解析方法命令行參數... – 2012-04-18 10:11:02

+0

你確定參數作爲一個字符串的矢量? – Bitmap 2012-04-18 11:18:16

0

如果你正在尋找一個DIY,那麼也許這可能是起點。

public class Foo 
{ 
    private static final String[] acceptedArgs = { "-p1", "-p2", "-p3" }; 

    public void handleCommandArgs(String... args) 
    { 
    if (args != null) 
    { 
     for (int argIndex = 0; argIndex < args.length; argIndex++) 
     { 
     for (int acceptedIndex = 0; acceptedIndex < acceptedArgs.length; acceptedIndex++) 
     { 
      if (args[argIndex] != null && args[argIndex].equals(acceptedArgs[acceptedIndex])) 
      { 
      String arg = args[argIndex], param = args[argIndex + 1]; 
      performRoutine(arg, param); 
      } 
     } 
     } 
    } 
    } 
    private void performRoutine(String arg, String param) 
    { 
    System.out.println(arg + " ->" + param.replace(",", "")); 
    } 

    public static void main(String[] args) 
    { 
    (new Foo()).handleCommandArgs(args); 
    } 
}