繁体   English   中英

Java:如何分割和保留定界符

[英]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})" )仅在标点符号之前分割。

IDEONE Java演示

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM