【问题标题】:Skip unknown command line arguments跳过未知的命令行参数
【发布时间】:2011-04-10 06:43:16
【问题描述】:
在我拥有的当前应用程序中,传入的命令行参数在几个“级别”上进行解析。
在最高级别,我只想解析一些选项并将其余的留给“较低级别”。但是,到目前为止,我尝试过的所有库(Common Cli、args4j、JOpt、gnu.jargs)在我尝试为它们提供未知选项时都会抛出“未知选项”异常。
我真的不想再写一个命令行解析类。是否有一个库/类可以解析这些选项并跳过未知选项?
谢谢
【问题讨论】:
标签:
java
command-line
command-line-arguments
【解决方案1】:
jopt 允许您指定默认值。不抛出异常。
parser.accepts("count").withOptionalArg().ofType(Integer.class).defaultsTo(-1);
【解决方案2】:
有更好的解决方案。
public static BiFunction<String[],CmdLineParser,String[]> stripUnusedArgs=(args,parser)->{
List<String> accepteds=parser.getOptions().stream().map(opt->opt.option.toString()).collect(Collectors.toList());
List<String> stripedArgs=new ArrayList<>();
for(int i=0; i< args.length;i++){
if(accepteds.contains(args[i])){
stripedArgs.add(args[i]);
stripedArgs.add(args[i+1]);
}
}
return stripedArgs.toArray(new String[0]);
};
然后使用它:
CmdLineParser parser = new CmdLineParser(CustomArgsObject);
stripUnusedArgs.apply(args,parser);