使用Apache Commons CLI进行命令行解析

3

我正在使用Apache Commons 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(",");
 }

我这样做对吗?字符串中是否只包含我想要的数据,或者会有意外的空格或其他东西?


请发布您正在使用的完整代码,包括构建解析器和选项。 - helmy
你为什么要使用Arrays.toString()将数组转换成字符串,然后再拆分回来呢?请发布您正在使用的完整代码,以便我们可以看到选项等内容,以便其他人受益。 - helmy
2个回答

4

使用hasArgs(),并将值分隔符设置为逗号,这样选项就变成了

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

这是CLI中处理多值选项的方式。

嘿,我能够分离字符串,但后来得到了意外的结果,例如比较返回false,而期望的是true。我将发布代码,展示我如何获取字符串。 - user3505394
我建议您提出一个新问题,而不是修改当前的问题。 - Jim Garrison

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);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接