gpt4 book ai didi

Java:如何分割和保留分隔符

转载 作者:行者123 更新时间:2023-11-30 02:56:46 26 4
gpt4 key购买 nike

我找不到解决这个问题的确切方法。我想分割一个带有空格并且可以带有标点符号的句子。我想保留单词和标点符号并将它们存储在一个数组中。

 Example sentence;
We have not met, have we?

Desired array;
{"We", "have", "not", "met", ",", "have", "we", "?"}

我试图用单个字符串分割方法分割句子。我查看了有关堆栈溢出的其他相关问题,但无法找到适合我的正则表达式,尤其是问号。

最佳答案

您可以尝试使用空格或在非单词字符之前的位置进行拆分:

\s+|(?=\W)

请参阅regex demo

模式详细信息:\s+|(?=\W) 包含两个用 | 符号分隔的替代方案。 \s+ 匹配分割时删除的 1 个或多个空格。 (?=\W) 是一个正向先行,仅匹配其包含的模式之前的空格 - 此处,\W 匹配任何非单词字符(不是字母) 、数字或下划线)。

注意:如果非单词 \W 类对您来说太“贪婪”,您可以使用标点符号类,\p{P} (String pattern = "\\s+|(?=\\p{P})") 仅在标点符号之前分割。

IDEONE Java demo :

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, ?]

如果您需要将非空白/非单词 block 标记为整个单元(例如,?!! 作为一个数组元素),请使用此匹配技术:

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, ?!!]

参见another IDEONE demoa regex demo .

关于Java:如何分割和保留分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37039215/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com