我有一个看起来像这样的字符串:
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());
答案 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.*=");