2010-09-09 144 views
1

在当前的应用程序中,传入的命令行参数在几个“级别”上被解析。跳过未知的命令行参数

在最高级别上,我只想解析一些选项,并将其余部分留在“较低级别”。然而,到目前为止,我尝试过的所有库(Common Cli,args4j,JOpt,gnu.jargs)都会在尝试提供它们时引发“未知选项”异常,以及未知选项。

我真的不想写一个又一个命令行解析类。有没有一个库/类可以解析这些选项并跳过未知选项?

谢谢

+0

你可以张贴例如你怎么努力去做呢? – 2010-09-09 13:51:26

回答

1

jopt让你指定一个默认值。不会引发异常

parser.accepts("count").withOptionalArg().ofType(Integer.class).defaultsTo(-1); 
0

确信有更好的解决方案。

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