文本按照标点符号切分符号丢掉问题

问题:文本按照标点符号切分符号丢掉问题

项目场景:需要对一个文字段落按照标点符号切分成一个个句子,使用正则切分的过程中发现标点符号丢了,


问题描述

文本按照标点符号切分符号丢掉问题
原始代码:

    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));
        }
    }

执行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值