[英]Java: How to split and keep delimiter
我找不到解决我遇到的这个问题的确切方法。 我想拆分一个包含空格和标点符号的句子。 我想保留单词和标点符号,并将它们存储在单个数组中。
Example sentence;
We have not met, have we?
Desired array;
{"We", "have", "not", "met", ",", "have", "we", "?"}
我正在尝试使用单个String拆分方法拆分句子。 我已经研究了有关堆栈溢出的其他相关问题,但我无法获得适合我的正则表达式,尤其是问号。
您可以尝试使用空格或非单词字符之前的位置进行拆分:
\s+|(?=\W)
模式详细信息 : \\s+|(?=\\W)
包含两个备选选项,并用|
分隔|
符号。 \\s+
匹配拆分时删除的1个或多个空格。 (?=\\W)
是正向超前,仅在其包含的模式之前匹配空白空间-在这里, \\W
匹配任何非单词字符(不是字母,数字或下划线)。
注意 :如果非单词\\W
类对您来说太“贪婪”,则可以使用标点符号类\\p{P}
( String pattern = "\\\\s+|(?=\\\\p{P})"
)仅在标点符号之前分割。
String str = "We have not met, have we?";
String[] chunks = str.split("\\s+|(?=\\W)");
System.out.println(Arrays.toString(chunks));
// => [We, have, not, met, ,, have, we, ?]
如果您需要将非空白/非单词块标记为整个单位 (例如, ?!!
作为一个数组元素),请使用以下匹配技术:
Pattern ptrn = Pattern.compile("[^\\s\\W]+|\\S+");
Matcher m = ptrn.matcher("We have not met, have we?!!");
List<String> list = new ArrayList<>();
while (m.find()) {
list.add(m.group(0));
}
System.out.println(list); // => [We, have, not, met, ,, have, we, ?!!]
参见另一个IDEONE演示和regex演示 。
String sentence="We have not met, have we ?";
String[] splited = sentence.split("\\s+");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.