关于Java命令行参数

关于Java命令行参数,java,string,Java,String,我为程序设置了以下命令行参数。参数proc是必需的参数chgval是可选的,参数inputfile是可选的 ./test.sh-proc mode1-chval a-inputfile b.csv 我需要修改下面的函数,以便命令行参数中应该存在任意一个可选参数以及强制参数proc。如果命令行中有两个可选参数chval、inputfile以及它现在允许的强制参数proc。我不希望它发生它应该抛出一个错误 下面列出了有效值,其余值应为错误 ./test.sh-过程模式1-chval a ./test

我为程序设置了以下命令行参数。参数proc是必需的参数chgval是可选的,参数inputfile是可选的

./test.sh-proc mode1-chval a-inputfile b.csv

我需要修改下面的函数,以便命令行参数中应该存在任意一个可选参数以及强制参数proc。如果命令行中有两个可选参数chval、inputfile以及它现在允许的强制参数proc。我不希望它发生它应该抛出一个错误

下面列出了有效值,其余值应为错误

./test.sh-过程模式1-chval a

./test.sh-proc mode1-inputfile b.csv

./test.sh-过程模式1


 public static Options usage() {

      Option proc = OptionBuilder.withArgName("proc")
                                      .hasArg()
                                      .isRequired()
                                      .withDescription("Process Mode for testing:")

                                      .create("proc");
      Option chgval = OptionBuilder.withArgName("chgval")
                                      .hasArg()
                                      .withDescription("chg eeds to be Processed")
                                      .create("chgval");
      Option inputFile = OptionBuilder.withArgName("inputfile")
                                      .hasArg()
                                      .withDescription("Name of the input file")
                                      .create("inputfile");

      Options options = new Options();
      options.addOption(proc);
      options.addOption(chgval);
      options.addOption(inputFile);

      return options;
  }


需要修改什么?

如果您的意思是
inputfile
chgval
应该是互斥的,那么您应该使用如果您的意思是
inputfile
chgval
应该是互斥的,那么您应该使用Dancrumb是正确的,因为您使用的互斥选项。以下是如何在您的案例中使用它:

Options options = new Options();

OptionGroup group1 = new OptionGroup();
group1.addOption(chgval);
group1.addOption(inputFile);

options.addOption(proc);
options.addOptionGroup(group1);
所以现在,
chgval
inputFile
是相互排斥的选项。在像
“-proc mode1-chgval a-inputfile b.csv”
这样的参数上,它将抛出一个
AlreadySelectedException:
“指定了选项
inputfile
,但已从该组中选择了一个选项:
chgval


顺便说一句,我还注意到你的帖子中
chval
chgval
之间的不一致性Dancrumb是正确的,因为你使用了相互排斥的选项。以下是如何在您的案例中使用它:

Options options = new Options();

OptionGroup group1 = new OptionGroup();
group1.addOption(chgval);
group1.addOption(inputFile);

options.addOption(proc);
options.addOptionGroup(group1);
所以现在,
chgval
inputFile
是相互排斥的选项。在像
“-proc mode1-chgval a-inputfile b.csv”
这样的参数上,它将抛出一个
AlreadySelectedException:
“指定了选项
inputfile
,但已从该组中选择了一个选项:
chgval


顺便说一句,我还注意到你的帖子中
chval
chgval

之间的不一致,闻起来像是家庭作业(你所有的其他问题也是如此)。如果是的话,请给他们贴上标签。闻起来像是家庭作业(就像你所有的其他问题一样)。如果它们是,请标记它们。我需要在上面的函数中更改什么?我需要在上面的函数中更改什么?