如何解决如何用两个定界符分割一个字符串并只保留其中一个?
我想在标点符号和空格之间分割字符串,但要保留标点符号。 E.x
String example = "How are you? I am fine!"
我想因此而拥有
["How","are","you","?","I","am","fine","!"]
但是我得到了
["how"," ","i","!"].
我使用的是example.toLowerCase().trim().split("(?<=\\b|[^\\p{L}])");
解决方法
您为什么要toLowerCase()
?这已经弄乱了您的预期结果。以及为什么在完整字符串上使用trim()
?
通过一次split
调用进行此操作可能不太简单。
一种替代方法是只过滤掉不需要的条目:
String example = "How are you? I am fine!";
Pattern pattern = Pattern.compile("\\b");
String[] result = pattern.splitAsStream(example)
.filter(Predicate.not(String::isBlank))
.toArray(String[]::new);
System.out.println(Arrays.toString(result));
输出:
[How,are,you,?,I,am,fine,!]
回应您希望将[How,!]
作为输出的评论;只需不使用Arrays.toString
打印,而是自己手动构建字符串。该数组不包含任何空格。
System.out.println("[" + String.join(",",result) + "]");
,
您可以执行以下操作:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String example = "How are you? I am fine!";
String[] arr = example.split("\\s+|\\b(?=\\p{Punct})");
System.out.println(Arrays.toString(arr));
}
}
输出:
[How,!]
正则表达式的解释:
-
\\s+
指定空格 -
\\b
指定单词边界 -
(?=\\p{Punct})
指定了标点符号的正面外观。 -
|
指定交替(OR
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。