如何在命令行参数中使用indexOf()?

时间:2017-02-21 11:27:47

标签: java

如何检查以下命令行参数 - inventory make = Honda desc by_count total - 是否make =?

我创建了 String [] savedArgs ,所以我将所有参数传递给了这个数组,但是数组没有indexOf()所以我现在有点迷失...

我希望能够在命令行参数中查找 make = ,以便我可以使用适当的方法根据汽车制造商显示列表。我所能做的就是使用contains()来查找完全匹配(例如: make = Honda make = BMW )但这样我会重复相同的代码时代,我相信这是糟糕的设计。

提前致谢

2 个答案:

答案 0 :(得分:1)

如果您想自己处理输入参数,可以检查每个参数是否包含参数名称的子字符串(' make =')然后拆分字符串:

String make = "";
for (String arg : savedArgs) {
    if (arg.contains("make=")) {
        make = arg.split("make=")[1];
    }
}

根据需要重复每个参数。

更好的解决方案可能是使用Apache Commons CLI

答案 1 :(得分:1)

没有内置的indexOf或类似方法可以开箱即用,无法满足您的需求。一种选择是:

    final String makeArgPrefix = "make=";
    Optional<String> makeArg = Stream.of(args)
            .filter(arg -> arg.startsWith(makeArgPrefix))
            .findAny();
    makeArg.ifPresent(arg -> System.out.println(arg.substring(makeArgPrefix.length())));

这需要Java 8,因为我正在使用流。在命令行参数中使用make=Honda打印

Honda

没有考虑到多个命令行参数可以以name=开头。它可以根据您的具体要求进行改进。

请允许我补充一点,命令行参数的标准解释会从左到右处理它们(如果你不想忽略某些事情,这是一件明智的事情)。像

这样的东西
for (String arg : args) {
    if (arg.equals("desc") {
        ascending = false;
    } else if (arg.startsWith(makeArgPrefix) {
        make = arg.substring(makeArgPrefix.length());
    } else if // and so on

}

当然,请以最适合您特定情况的方式进行。