2010-09-09 141 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);