带有变量名的命令行参数

时间:2019-01-08 12:59:46

标签: java

通常,当我们必须使用Java访问命令行参数时,使用args [] 但这在命令行输入这样的情况下会很好,

//Demo is class
C:\java Demo 1 2

我们只需使用args [0]和args [1]即可访问1和2。

但是我遇到了这样一种情况,命令行输入将是这样,

C:\java Demo --num1=12 --num2=14

如果我必须获得大于num1和num2的值,我怎么得到它?

每次只获得更简单的版本时,我都会用几次谷歌搜索命令行参数,但都进行了少量修改。

我在这里遇到了这个答案

How do I parse command line arguments in Java?

但是我正在寻找一个没有第三方库的简单Java版本。是的,它们使我们的生活变得轻松,但是我想首先学习Java。

public static void main(String[] args) {
    //simpler way to access command line arguments
    int first_num = Integer.parseInt(args[0]);
    int second_num = Integer.parseInt(args[1]);

    System.out.println("num1= "+first_num+", num2= "+second_num);

}

实际上不确定是否通过使用

C:\ java Demo --num1=12 --num2=13

我们将可以通过或不通过main方法直接访问num1和num2。

但是我需要那些值可以在main方法中使用。

希望我很清楚,如果需要任何信息,请告诉我。

2 个答案:

答案 0 :(得分:2)

要以一种非常简单的方式实现您想要的目标,您可以尝试

    public static void main(String[] args) {
    Map<String, String> argsMap = new LinkedHashMap<>();
    for (String arg: args) {
        String[] parts = arg.split("=");
        argsMap.put(parts[0], parts[1]);
    }

    argsMap.entrySet().forEach(arg-> {
        System.out.println(arg.getKey().replace("--", "") + "=" + arg.getValue());
    });
}

注意:根据重复的帖子,还有更多高级方法。但是我想您正在寻找一种非常简单的方法。

答案 1 :(得分:1)

我建议您看一下完全符合您要求的Apache Commons CLI:

http://commons.apache.org/proper/commons-cli/

请先阅读介绍:http://commons.apache.org/proper/commons-cli/introduction.html

它甚至有一个很好的流利的API:

Options options = new Options();
options.addOption(OptionBuilder.withLongOpt("num1")
                               .withDescription("some info about the usage")
                               .hasArg()
                               .withArgName("VALUE")
                               .create() );