[英]Java 8 streams to split and collect tokens
我有这样的输入
abc|label1 cde|label2 xyz|label1 mno|label3 pqr|label2
我想创建一个这样的字符串
"abc cde xyz mno pqr"
这是我走了多远
Arrays.stream(text.split(" "))
.map(i -> i.split("\\|"))
.collect(Collectors.joining(" "));
你很接近,但你忘了只取内部split
返回的String
数组的第一个元素:
Arrays.stream(text.split(" "))
.map(i -> i.split("\\|")[0])
.collect(Collectors.joining(" "));
这将产生所需的String
:
abc cde xyz mno pqr
如果您想采用不同的方法,我建议使用正则表达式。 我每天都使用regex101.com为我的应用程序构建各种表达式。 以下是我在您的情况下使用正则表达式的方法:
String input = "abc|label1 cde|label2 xyz|label1 mno|label3 pqr|label2";
Pattern p = Pattern.compile("\\w+(?=\\|)");
Matcher m = p.matcher(input);
StringJoiner joiner = new StringJoiner(" ");
while(m.find()) {
joiner.add(m.group());
}
System.out.println(joiner.toString());
您还可以使用Andreas的表达式,它在更少的行中处理它(我对其进行了一些更改以补偿可能缺少空格的情况):
String input = "abc|label1 cde|label2 xyz|label1 mno|label3 pqr|label2";
input = String.join(" ", input.split("\\|\\w+\\d\\s*"));
System.out.println(input);
两种解决方案都产生了预期的结果:
abc cde xyz mno pqr
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.