解析Java命令行程序的参数
如果我想解析该怎么办:
java MyProgram -r opt1 -S opt2 arg1 arg2 arg3 arg4 --test -A opt3
我想要的结果是:
regular Java args[] of size=4
org.apache.commons.cli.Options[] of size=3
org.apache.commons.cli.Options[] #2 of size=1
我更喜欢使用Apache Commons
CLI,但是文档对我上面提到的情况有些不清楚。具体来说,文档没有告诉您如何处理我在下面指定的第3种类型的选项:
1. options with a "-" char 2. options with a "--" char 3. options without any marker, or "bare args"
我希望Apache Commons
CLI可以正常工作,但是如果这些args没有选项前缀,仍然可以将常规args传递给程序。也许可以,但是文档没有这么说,因此在我阅读它时…
-
您可以手动完成。
注意: 使用HashMap代替内部类可能更好。
/** convenient "-flag opt" combination */ private class Option { String flag, opt; public Option(String flag, String opt) { this.flag = flag; this.opt = opt; } } static public void main(String[] args) { List<String> argsList = new ArrayList<String>(); List<Option> optsList = new ArrayList<Option>(); List<String> doubleOptsList = new ArrayList<String>(); for (int i = 0; i < args.length; i++) { switch (args[i].charAt(0)) { case '-': if (args[i].length < 2) throw new IllegalArgumentException("Not a valid argument: "+args[i]); if (args[i].charAt(1) == '-') { if (args[i].length < 3) throw new IllegalArgumentException("Not a valid argument: "+args[i]); // --opt doubleOptsList.add(args[i].substring(2, args[i].length)); } else { if (args.length-1 == i) throw new IllegalArgumentException("Expected arg after: "+args[i]); // -opt optsList.add(new Option(args[i], args[i+1])); i++; } break; default: // arg argsList.add(args[i]); break; } } // etc }
-
Java命令行参数
2021-02-02 关注 0 浏览85 1答案
-
Java命令行参数。使用*作为乘法的参数
2021-01-30 关注 0 浏览61 1答案
-
使用Ant通过命令行参数运行程序
2021-01-31 关注 0 浏览215 1答案
-
带有外部.jar的Java命令行
2021-01-31 关注 0 浏览70 1答案
-
如何在Java中解析命令行参数?
2021-02-02 关注 0 浏览128 1答案
-
如何在 Java 中解析命令行参数?
2022-03-22 关注 0 浏览40 1答案
-
设置多个系统属性Java命令行
2021-01-30 关注 0 浏览145 1答案
-
Java执行命令行程序'find'返回错误
2021-01-29 关注 0 浏览102 1答案
-
解析命令行参数的最佳方法?
2022-05-26 关注 0 浏览20 1答案
-
Java Runtime.getRuntime():从执行命令行程序获取输出
2021-02-02 关注 0 浏览239 1答案