CLI:getOptionValue始终返回'null'

时间:2017-04-23 14:26:54

标签: java apache-commons-cli

public class converter {

  public static void main(String [] args) {
    Options opt = new Options();

    opt.addOption("I", "in", false, "Eingabeformat (2,8,10,16)");
    opt.addOption("O", "out", false, "Ausgabeformat (2,8,10,16)");
    opt.addOption("V", "value", true, "Zu konvertierende Zahl");

    CommandLineParser parser = new DefaultParser();
    String value = "0";
    String in = "0";
    String out = "0";
    int inInt = 0; 
    int outInt = 0;

    try {
        CommandLine cl = parser.parse(opt, args);

        if (cl.hasOption("I")) {
            in = cl.getOptionValue("I");
            System.out.println(in); 
        } else if (cl.hasOption("in")) {
            in = cl.getOptionValue("in");
            inInt = Integer.parseInt(in);  
        }

        if (cl.hasOption("O")) {
            out = cl.getOptionValue("O");
            outInt = Integer.parseInt(out); 
        } else if (cl.hasOption("out")) {
            out = cl.getOptionValue("out");
            outInt = Integer.parseInt(out); 
        }

        if (cl.hasOption("V")) {
            value = cl.getOptionValue("V");
        } else if (cl.hasOption("value")) {
            value = cl.getOptionValue("value");
        }

    } catch (ParseException e) {
        e.printStackTrace();
    }
}

您好,对于我的课程,我必须学会使用CLI,现在看起来还不错。我的问题是:变量'in'在使用cl.getOptionValue(“I”)后总是返回null。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

我假设您希望args I,O V 具有选项值,否则您不会尝试解析它们。但是,您只需通过将addOption调用中的第三个参数设置为true来为 V 选项指定。如果要指定选项值,则应将它们全部设置为true

    opt.addOption("I", "in", true, "Eingabeformat (2,8,10,16)");
    opt.addOption("O", "out", true, "Ausgabeformat (2,8,10,16)");
    opt.addOption("V", "value", true, "Zu konvertierende Zahl");

顺便说一句,你应该用一个大写的C'这个Java惯例来命名你的班级Converter

答案 1 :(得分:0)

public class converter {

public static void main(String [] args) {
    Options opt = new Options();

    opt.addOption("I", "in", true, "Eingabeformat (2,8,10,16)"); // Bei false gibts spaeter null
    opt.addOption("O", "out", true, "Ausgabeformat (2,8,10,16)"); // Bei false gibt spaeter null
    opt.addOption("V", "value", true, "Zu konvertierende Zahl");

    CommandLineParser parser = new DefaultParser();
    String value = "0";
    String in, out;
    int inInt = 10; 
    int outInt = 10;

    try {
        CommandLine cl = parser.parse(opt, args);

        if (cl.hasOption("I")) {
            in = cl.getOptionValue("I");
            inInt = Integer.parseInt(in);
        } else if (cl.hasOption("in")) {
            in = cl.getOptionValue("in");
            inInt = Integer.parseInt(in);
        }

        if (cl.hasOption("O")) {
            out = cl.getOptionValue("O");
            outInt = Integer.parseInt(out);
        } else if (cl.hasOption("out")) {
            out = cl.getOptionValue("out");
            outInt = Integer.parseInt(out);
        }

        if (cl.hasOption("V")) {
            value = cl.getOptionValue("V");
            System.out.println(convert(value, inInt, outInt));
        } else if (cl.hasOption("value")) {
            value = cl.getOptionValue("value");
            System.out.println(convert(value, inInt, outInt));
        } else {
            System.out.println("Keinen Wert eingegeben. Erneut Versuchen!");
        }
    } catch (ParseException e) {
        e.printStackTrace();
    }

}

public static String convert(String input, int srcRadix, int dstRadix) {
    int value = Integer.parseInt(input, srcRadix);
    return Integer.toString(value, dstRadix);
}

}