簡體   English   中英

Apache Commons CLI:獲取選項的值列表

[英]Apache Commons CLI : Getting list of values for an option

對於CLI,我需要傳入一個int數組作為特定選項的輸入。

示例 - 以下命令將接受customerIds數組並執行某些操作。

myCommand -c 123 124 125

我使用Apache commons CLI實現了CLI,我使用getOptionValues(“c”)來檢索此數組。

問題是,這只返回數組中的第一個元素,即[123],而我期望它返回[123,124,125]。

我的代碼的精簡版本,

CommandLine cmd;
CommandLineParser parser = new BasicParser();
cmd = parser.parse(options, args);
if (cmd.hasOption("c")){
String[] customerIdArray = cmd.getOptionValues("c");
// Code to parse data into int
}

有人可以幫我在這里找出問題嗎?

我想在這里添加這個作為@Zangdak的答案,並在同樣的問題上添加我的發現。

如果不調用#setArgs(int)則會發生RuntimeException。 當您知道此選項的確切最大參數量時,請設置此特定值。 當此值未知時,類Option具有常量: Option.UNLIMITED_VALUES

這將改變gerrytans對以下內容的回答:

Options options = new Options();
Option option = new Option("c", "c desc");
// Set option c to take 1 to oo arguments
option.setArgs(Option.UNLIMITED_VALUES);
options.addOption(option);

您必須設置該選項可以采用的參數值的最大值,否則它假定該選項只有1個參數值

Options options = new Options();
Option option = new Option("c", "c desc");
// Set option c to take maximum of 10 arguments
option.setArgs(10);
options.addOption(option);

看起來我對派對來說有點晚了但是apache commons cli已經發展了,現在(至少在1.3.1中)我們有了一種新方法來設置可以有無限數量的參數

Option c = Option.builder("c")
        .hasArgs() // sets that number of arguments is unlimited
        .build();
        Options options = new Options();
        options.addOption(c);

您必須指定兩個參數setArgssetValueSeparator 然后你可以傳遞一個參數列表,如-k=key1,key2,key3

Option option = new Option("k", "keys", true, "Description");
// Maximum of 10 arguments that can pass into option
option.setArgs(10);
// Comma as separator
option.setValueSeparator(',');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM