4

我正在尝试使用OptionBuilder.withArgName( "property=value" )

如果我的选项被称为状态并且我的命令行是:

--status p=11 s=22

它只成功识别出第一个参数是 11 并且它无法识别第二个参数......

Option status = OptionBuilder.withLongOpt("status")
                .withArgName( "property=value" )
                .hasArgs(2)
                .withValueSeparator()
                .withDescription("Get the status")
                .create('s');
options.addOption(status);

提前感谢您的帮助

4

1 回答 1

9

您可以使用传递的命令行选项的简单修改来访问传递的属性

--status p=11 --status s=22

或使用您的简短语法

-s p=11 -s s=22

在这种情况下,您只需使用代码即可访问您的属性

if (cmd.hasOption("status")) {
  Properties props = cmd.getOptionProperties("status");
  System.out.println(props.getProperty("p"));
  System.out.println(props.getProperty("t"));
}

如果您需要严格使用您的语法,您可以手动解析您的 property=value 对。在这种情况下,您应该删除 .withValueSeparator() 调用,然后使用

String [] propvalues = cmd.getOptionValues("status");
for (String propvalue : propvalues) {
   String [] values = propvalue.split("=");
   System.out.println(values[0] + " : " + values[1]);
}
于 2013-09-04T11:13:08.967 回答