如何检查以下命令行参数 - inventory make = Honda desc by_count total - 是否make =?
我创建了 String [] savedArgs ,所以我将所有参数传递给了这个数组,但是数组没有indexOf()所以我现在有点迷失...
我希望能够在命令行参数中查找 make = ,以便我可以使用适当的方法根据汽车制造商显示列表。我所能做的就是使用contains()来查找完全匹配(例如: make = Honda 或 make = BMW )但这样我会重复相同的代码时代,我相信这是糟糕的设计。
提前致谢
答案 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
}
当然,请以最适合您特定情况的方式进行。