2014-04-24 36 views
3

M tryng使用apache commons cli,我的用例是帶有一些選項的可變數量的參數。使用Apache公共命令行解析cli

-p str1 str2; 

它可以是

-p str1 str2 str3 .. strn 

另一個是

-m str1 
-h 

cmdline.getOptionValues("p"); 

它只提取最後一個字符串。如何獲取特定選項的所有值?

編輯:

if(cmdline.hasOption("p")){ 
String[] argsList = cmdline.getOptionValues(p); 
    String strLine = Arrays.toString(argsList); 
    argsList = strLine.split(","); 
} 

Mi個這樣做對嗎?字符串是否包含我想要的數據或意想不到的空白空間?

+0

請發佈您正在使用的完整代碼,包括構建解析器和選項。 – helmy

+0

爲什麼使用Arrays.toString()將數組填充到字符串中,然後再將它分離出來?請發佈您正在使用的完整代碼,以便我們可以查看哪些選項等,以便其他人可以受益。 – helmy

回答

4

使用hasArgs()設置爲一個逗號值分隔符,所以選擇成爲

-p str1,str2,str3,...,strn 

這是多值的選項是如何在CLI

處理
+0

是啊它的工作對我來說.. thx :) – user3505394

+0

嘿能夠分開字符串bt m gettng意想不到的結果後來就像比較它返回false在預期是true.I將後代碼hw m fetchng字符串 – user3505394

+0

我建議你問一個新的這個問題而不是修改當前的問題。 –

1

這並不完全清楚,我是你」重新做,並在「它返回false」,但這應該工作,我認爲你做你想做的事情。

final CommandLineParser cmdLinePosixParser = new PosixParser(); 
Options options = new Options(); 
options.addOption(OptionBuilder.withArgName("p").hasArgs().create("p")); 
CommandLine commandLine = cmdLinePosixParser.parse(options, args); 
if (commandLine.hasOption("p")) { 
    String[] pArgs = commandLine.getOptionValues("p"); 
    System.out.println(pArgs.length); 
    for (String p : pArgs) { 
     System.out.println(p); 
    } 
} 
+1

感謝您的代碼。我想出了我的錯誤。 – user3505394