2017-02-21 80 views
0

我该如何检查以下命令行参数 - 库存make =本田desc by_count总数 - have make =?如何在命令行参数中使用indexOf()?

我创建的String [] savedArgs所以我通过所有的参数数组,但没有对数组的indexOf(),所以现在I`ma小败...

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

在此先感谢

+0

既然你有一个字符串数组,你可以迭代该数组并检查每个单独的字符串 - 在那里你有你需要的所有方法,比如'matches()','indexOf'等。或者你可以使用像cli库一样[Apache Commons CLI](https://commons.apache.org/proper/commons-cli/)可以更轻松地处理命令行。 – Thomas

回答

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 

} 

当然,这样做是最适合您的特定情况的方式。

+0

太棒了!谢谢!! – Fodrigoal

1

如果你想自己处理输入参数,你可以检查是否每一个参数包含您的参数名称的字符串(“使=”),然后分割字符串:

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

根据需要对每个参数重复。

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

+0

或使用getopt:https://www.gnu.org/software/gnuprologjava/api/gnu/getopt/Getopt.html –