将可选参数传递给CLI程序 - Java

时间:2017-03-15 06:49:45

标签: java command-line command-line-interface command-line-arguments command-line-tool

我正在制作一个命令行程序,我正在使用 if 条件来检查用户输入的内容并启动特定方法。

input = bufferedReader.readLine;

if (input.equals("search"))
    search();


现在,要进行搜索,用户必须输入:

>>> search
>>> aTextToSearchFor

但我希望用户能够输入

>>> search -c 3

因此,3将作为参数传递给search()方法 另外,search只应该有效,而且会传递默认值0


注意:

  • 我愿意在没有-c的情况下实现此功能,因此命令将为search 5
  • 我找到了关于Apache Commons CLI& Jcommander,但我找不到足够简单的解释来理解任何事情:D

1 个答案:

答案 0 :(得分:1)

您可能会发现String.split有帮助。也许这样的事情可以帮助你开始?

input = bufferedReader.readLine();
String[] args = input.split(" +"); // split on one or more spaces
if (args[0].equals("search")) {
    if (args.length > 2) {
        // args may be an array like {"search", "-c", "5"}.
        // After you confirm that, you may need to convert args[2]
        // from a String to an int using Integer.parseInt
        // (more code here)
    }
}

当程序很小时,可以像这样开始这么简单。如果你的程序开始变大并且你觉得你一遍又一遍地编写类似的代码,那么现在可能是查看命令解析库的好时机。

您提到了Apache Commons CLI或Jcommander,但我个人认为argparse4j在功能和简单性之间取得了良好的平衡。它有一个流畅的API,这意味着你的代码看起来像:

ArgumentParser p = ArgumentParsers.newArgumentParser(myCommandName)
        .description(myCommandDescription);
p.addArgument(...).help(...)...
...
p.parseArgsOrFail(args);