问题:文本按照标点符号切分符号丢掉问题
项目场景:需要对一个文字段落按照标点符号切分成一个个句子,使用正则切分的过程中发现标点符号丢了,
问题描述
文本按照标点符号切分符号丢掉问题
原始代码:
public static void main(String[] args) {
String content = "这是一段内容。这是另一段内容!这是第三段内容?。";
StringTokenizer str = new StringTokenizer(content, "。?!.?!");
while (str.hasMoreElements()) {
String element = StringUtils.trim((String) str.nextElement());
if (StringUtils.isNotBlank(element)) {
System.out.println(element);
}
}
}
执行结果:
问题解决:
提示:先按照正则定位到标点符号,然后将内容进行切割
修正后代码:
public static void main(String[] args) {
String content = "这是一段内容。这是另一段内容!这是第三段内容?";
String regex = "([。?!.?!])";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(content);
List<String> list = Lists.newArrayList();
int start = 0;
int end = 0;
while (matcher.find()) {
// System.out.println("原文符号:" + matcher.group() + ",位置:" + matcher.start());
end = matcher.start() + 1;
String substring = content.substring(start, end);
System.out.println(substring);
list.add(substring);
start = end;
}
// 该处用于处理尾部没有标点符号的情况,否则会丢失尾部数据
if (end < content.length()){
elements.add(content.substring(end));
}
}
执行结果: