使用java正则删除重复单词

使用java正则删除重复单词

正则表达式非常适合处理文本,文本我们使用正则删除重复单词,这时很常见的任务。

正则匹配后续的

java通过正则删除重复单词不是很复杂,但第一次写很可能出错:

String regex = "\\b(\\w+)(\\s+\\1\\b)+";

完整解释如下:

  1. \b: 查找单词边界 (仅匹配单词开始位置,而不是单词的中间位置);
  2. (\w+): 匹配一个或多个字符并记住作为组,供后面使用数字去引用;即匹配一个完整单词并记住。
  3. \s+: 匹配一个或多个空白字符;
  4. \1: 匹配在第二步中查找的单词;
  5. \b: 和第一步一样,确保不是匹配单词的一部分;
  6. (\s+\1\b)+:匹配一个或多个在第二步中查找的单词。

如果你想采用大小写不敏感方式匹配,仅需要使用CASE_INSENSITIVE标志编译上面正在表达式:

Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);

循环替换

去重的第二步是循环替换,使用一个单词替换重复部分:

String input = "The the string String string stringing.";
Matcher m = p.matcher(input);
while (m.find()) {
    input = input.replaceAll(m.group(), m.group(1));
}

它匹配上面定义的每个正则表达式的出现,并将整个字符串(这里是m.group())替换为第一个记住的组(m.group(1))的内容,后者是我们的单个单词。对上述输入字符串,m.group() 和 m.group(1) 将迭代两次,值分别为:

  • m.group(): “The the” , m.group(1): ‘The’
  • m.group(): “string String string” , m.group(1): “string”.

完整程序示例

package com.farenda.java.util.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Dedupper {

    public static void main(String[] args) {
        String input = "The the string String string stringing.";

        String regex = "\\b(\\w+)(\\s+\\1\\b)+";

        // Use compile(regex) if you want case sensitive.
        Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);

        Matcher m = p.matcher(input);
        while (m.find()) {
            input = input.replaceAll(m.group(), m.group(1));
        }

        System.out.println(input);
    }
}

输出结果为:

The string stringing.

总结

本文通过java正在表达中分组功能实现删除重复单词。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值