Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用lambda表达式将字符串拆分两次_Java_Lambda - Fatal编程技术网

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

Java 使用lambda表达式将字符串拆分两次,java,lambda,Java,Lambda,我有一个字符串,看起来像这样: key1=value1 键2=值2 键3=值3 /…/ 我只对value部分感兴趣。我写了下面的lambda表达式。我的目标是在新行上拆分,然后在=上拆分。Lambda在.split(“=”[1])指令失败,异常为ArrayIndexOutOfBoundsException:1。我该如何解决这个问题 List<String> stream = Arrays.stream(license .split(System.lin

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

key1=value1
键2=值2
键3=值3
/…/

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

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

拆分行后,您需要映射结果:

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());
String String=“key1=value1\n”+“key2=value2\n”+“key3=value3”;
列表结果=Arrays.stream(string.split(System.lineSeparator()))
.map(x->x.split(“=”[1])
.collect(Collectors.toList());

你的断线和换行很混乱。你实际上写的是:

String[] splitLineSep = System.lineSeparator().split("=");
String[] splitLicense = license.split(splitLineSep[1]);
List<String> stream =
    Arrays.stream(splitLicense)
        .collect(Collectors.toList());
String[]splitLineSep=System.lineSeparator().split(=”);
字符串[]splitLicense=license.split(splitLineSep[1]);
列表流=
Arrays.stream(splitLicense)
.collect(Collectors.toList());
所以,你试图:

  • 拆分
    许可证
  • 在通过在
    =
    上拆分
    系统.lineSeparator()
    并在
    =
    之后取零件而获得的字符串上
System.lineSeparator()
通常类似于
\n
(在Linux、Mac等上)或
\r\n
(在Windows上),即没有
=
登录的东西。因此,如果您获取分割数组的第二个元素,您将得到一个
AIOOBE
,因为没有这样的元素


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

为什么你把任务复杂化了

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

您的代码正在执行
System.lineSeparator().split(“=”[1]
。这就是你想写的吗?回答@khelwood的反问:你不是这个意思,因为行之间没有用
=
分隔。对不起,伙计们,我不明白。@mente你的代码是
.split(System.lineSeparator().split(“=”[1])
。您正在调用
System.lineSeparator()
上的
split
。我会问另一个问题。我没有抄任何答案@AndyTurner回答(没有任何代码)向我展示了正确的处理方法。太棒了!谢谢你能看看我的最新帖子吗?