gpt4 book ai didi

java - 将参数解析到 Java 命令行程序

转载 作者:IT老高 更新时间:2023-10-28 20:35:50 25 4
gpt4 key购买 nike

如果我想解析这个怎么办:

java MyProgram -r opt1 -S opt2 arg1 arg2 arg3 arg4 --test -A opt3

而我在程序中想要的结果是:

regular Java args[]  of size=4
org.apache.commons.cli.Options[] of size=3
org.apache.commons.cli.Options[] #2 of size=1

我更喜欢使用 Apache Commons CLI ,但文档对我上面介绍的案例有点不清楚。具体来说,文档没有告诉您如何处理我在下面指定的第三种类型的选项:

1. options with a "-" char
2. options with a "--" char
3. options without any marker, or "bare args"

我希望 Apache Commons CLI 能够工作,但如果这些 args 没有选项前缀,仍然能够将常规 args 传递给程序。也许确实如此,但当我阅读它时,文档并没有这样说......

最佳答案

使用 Apache Commons CLI library commandline.getArgs() 获取 arg1、arg2、arg3 和 arg4。这是一些代码:



import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.Option.Builder;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.ParseException;

public static void main(String[] parameters)
{
CommandLine commandLine;
Option option_A = Option.builder("A")
.required(true)
.desc("The A option")
.longOpt("opt3")
.build();
Option option_r = Option.builder("r")
.required(true)
.desc("The r option")
.longOpt("opt1")
.build();
Option option_S = Option.builder("S")
.required(true)
.desc("The S option")
.longOpt("opt2")
.build();
Option option_test = Option.builder()
.required(true)
.desc("The test option")
.longOpt("test")
.build();
Options options = new Options();
CommandLineParser parser = new DefaultParser();

String[] testArgs =
{ "-r", "opt1", "-S", "opt2", "arg1", "arg2",
"arg3", "arg4", "--test", "-A", "opt3", };

options.addOption(option_A);
options.addOption(option_r);
options.addOption(option_S);
options.addOption(option_test);

try
{
commandLine = parser.parse(options, testArgs);

if (commandLine.hasOption("A"))
{
System.out.print("Option A is present. The value is: ");
System.out.println(commandLine.getOptionValue("A"));
}

if (commandLine.hasOption("r"))
{
System.out.print("Option r is present. The value is: ");
System.out.println(commandLine.getOptionValue("r"));
}

if (commandLine.hasOption("S"))
{
System.out.print("Option S is present. The value is: ");
System.out.println(commandLine.getOptionValue("S"));
}

if (commandLine.hasOption("test"))
{
System.out.println("Option test is present. This is a flag option.");
}

{
String[] remainder = commandLine.getArgs();
System.out.print("Remaining arguments: ");
for (String argument : remainder)
{
System.out.print(argument);
System.out.print(" ");
}

System.out.println();
}

}
catch (ParseException exception)
{
System.out.print("Parse error: ");
System.out.println(exception.getMessage());
}
}

关于java - 将参数解析到 Java 命令行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7341683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com