如何在java 8中将String [] args与"="分开

Mis*_*r B 4 java arrays args java-8

我需要转变

String[] args = {"--path=C:/log", "--time=hourly"};
Run Code Online (Sandbox Code Playgroud)

String[] args = {"--path", "C:/log", "--time", "hourly"};
Run Code Online (Sandbox Code Playgroud)

我怎样才能以优雅的方式在Java 8中做到这一点?

List<String> newArgs = Lists.newArrayList();

for (String s : args) {
    String[] split = s.split("=");
    newArgs.add(split[0]);
    newArgs.add(split[1]);
}

String[] strarray = new String[newArgs.size()];
return newArgs.toArray(strarray);
Run Code Online (Sandbox Code Playgroud)

And*_*lko 9

String[] result = Stream.of(args)
        .flatMap(a -> Stream.of(a.split("=")))
        .toArray(String[]::new);
Run Code Online (Sandbox Code Playgroud)

  • 可能只是我,但我更喜欢`.map(x - > x.split("=")).flatMap(Arrays :: stream)`仍然是一个加号.我猜代码比这里的文字更响亮,每个人都发布了很多措辞,但这个字符最少,而且"内容最多". (6认同)
  • 我没有注意到你有这个很好的清晰答案.虽然我同意评论我的评论的人...当人们开始在引号内使用=字符时,真正的乐趣开始,作为他们的论点的一部分;-) (3认同)

Gho*_*ica 6

其他答案在技术上都很好,但真正的答案是:不要.

不要重新发明轮子.解析命令行选项实际上很难.无论你为第一步做出什么工作,但假设我们正在谈论的是一些旨在持久的东西,并且足以吸引用户 - 那么迟早,你花了越来越多的时间来处理选项.

因此:不要自己做任何事情(这当然有点乐趣)接受解析命令行选项是一个已解决的问题.只需获得一个现有的解决方案,请参阅此处的首发.

  • 确实 - 当您发现需要接受转义"="作为有效输入的一部分时,真正开始有趣...... (3认同)