将可选参数传递给 CLI 程序 - Java
Pass optional parameters to a CLI program - Java
我正在制作命令行程序,我正在使用 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
您可能会发现 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);
我正在制作命令行程序,我正在使用 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
您可能会发现 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);