有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java跳过未知的命令行参数

在当前的应用程序中,传入的命令行参数在几个“级别”上进行解析

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

我真的不想再写一个命令行解析类了。是否有库/类解析这些选项并跳过未知选项

谢谢!


共 (3) 个答案

  1. # 1 楼答案

    jopt允许您指定默认值。没有抛出异常

    parser.accepts("count").withOptionalArg().ofType(Integer.class).defaultsTo(-1);
    
  2. # 3 楼答案

    有更好的解决办法

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