使用lambda表达式将字符串拆分两次

时间:2018-03-26 09:07:37

标签: java lambda

我有一个看起来像这样的字符串:

key1=value1 key2=value2 key3=value3 /.../

我只对value部分感兴趣。我已经写了下面的lambda表达式。我的目标是拆分新线,然后拆分=。 Lambda在.split("=")[1])指令处失败,异常为ArrayIndexOutOfBoundsException: 1。我该如何解决这个问题?

List<String> stream = Arrays.stream(license
                .split(System.lineSeparator()
                .split("=")[1]))
                .collect(Collectors.toList());

3 个答案:

答案 0 :(得分:1)

分割线后需要映射结果:

String string = "key1=value1\n" + "key2=value2\n" + "key3=value3";
List<String> result = Arrays.stream(string.split(System.lineSeparator()))
                            .map(x -> x.split("=")[1])
                            .collect(Collectors.toList());

答案 1 :(得分:0)

你的换行和包装令人困惑。你实际写的是:

String[] splitLineSep = System.lineSeparator().split("=");
String[] splitLicense = license.split(splitLineSep[1]);
List<String> stream =
    Arrays.stream(splitLicense)
        .collect(Collectors.toList());

所以,你正试图:

  • 拆分license
  • System.lineSeparator()上分割=获得的字符串,并在=之后取得部分。

System.lineSeparator()通常类似\n(在Linux,Mac等上)或\r\n(在Windows上),即没有=符号的内容。因此,如果你采用split数组的第二个元素,你将获得AIOOBE,因为没有这样的元素。

你需要更仔细地思考你想要做什么。

答案 2 :(得分:0)

为什么你的任务过于复杂?

List<String> values = license.replaceAll("^.*=", "")
    .split("\n.*=");