Java正则表达式从字符串中删除重复的子字符串

2024-03-06

我正在尝试构建一个正则表达式来“减少”Java 字符串中重复的连续子字符串。例如,对于以下输入:

The big black dog big black dog is a friendly friendly dog who lives nearby nearby.

我想得到以下输出:

The big black dog is a friendly dog who lives nearby.

这是我到目前为止的代码:

String input = "The big black dog big black dog is a friendly friendly dog who lives nearby nearby.";

Pattern dupPattern = Pattern.compile("((\\b\\w+\\b\\s)+)\\1+", Pattern.CASE_INSENSITIVE);
Matcher matcher = dupPattern.matcher(input);

while (matcher.find()) {
    input = input.replace(matcher.group(), matcher.group(1));
}

对于除句子末尾之外的所有重复子字符串来说,这都很好:

The big black dog is a friendly dog who lives nearby nearby.

我知道我的正则表达式需要在子字符串中的每个单词后面有一个空格,这意味着它不会捕获带有句点而不是空格的情况。我似乎无法找到解决方法,我尝试使用捕获组并更改正则表达式以查找空格或句点而不仅仅是空格,但此解决方案仅在存在以下情况时才有效子字符串的每个重复部分之后的句点(“nearby.nearby.”)。

有人能指出我正确的方向吗?理想情况下,此方法的输入将是短段落,而不仅仅是单行话。


您可以使用

input.replaceAll("([ \\w]+)\\1", "$1");

See 现场演示: https://ideone.com/l2mdfG

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

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        String input = "The big black dog big black dog is a friendly friendly dog who lives nearby nearby.";

        Pattern dupPattern = Pattern.compile("([ \\w]+)\\1", Pattern.CASE_INSENSITIVE);
        Matcher matcher = dupPattern.matcher(input);

        while (matcher.find()) {
            input = input.replaceAll("([ \\w]+)\\1", "$1");
        }
        System.out.println(input);

    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java正则表达式从字符串中删除重复的子字符串 的相关文章

  • 为什么我只得到第一个捕获组?

    https stackoverflow com a 2304626 6607497 https stackoverflow com a 2304626 6607497 and https stackoverflow com a 370042
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • 覆盖函数内部的全局变量不适用于 Spyder 4

    我尝试从函数内覆盖全局定义的数据框 不知何故 全局值不会改变 在函数内打印数据帧可以使用预期值 import pandas as pd rawData pd read csv music csv appTitles pd DataFrame
  • kubernetes 容器的响应丢失

    我已经在openstack上安装了kubernetes 该设置在 coreos 上有一个主节点和一个节点 我有一个在 UDP 端口 5060 上托管 SIP 应用程序的 pod 并且我已创建服务为NODEPORT在 5060 上 规格 sp
  • 如何在matlab中的imagesc图中添加图例

    我有以下代码 创建打印到文件的图形 f figure set gcf Visible off imagesc exp genes sorted cut h colorbar set gcf Colormap mycmap set gca x
  • Chrome 扩展选项卡 onUpdated 事件

    我正在构建一个 chrome 扩展 每次打开新选项卡并加载页面时都应该收到通知 为此我正在使用 chrome tabs onUpdated 事件 问题是 如果在某个域 具有 src 上托管的页面 选项卡上插入 iframe 则会触发 onU
  • 您可以在 Java EE Web 应用程序中实现 Vue.js 吗?

    我只是和我的同学一起开发一个工具 我们想使用 Vue js 作为 Web 界面 用于描述我们编程的内容 我们在 Eclipse 中开发了一个 Java EE Web 应用程序 我们使用 Tomcat 7 作为 Web 服务器 我搜索了很长时
  • Assert.Fail() 被认为是不好的做法吗?

    我在进行 TDD 时经常使用 Assert Fail 我通常一次进行一个测试 但是当我对稍后想要实现的事情有了想法时 我会快速编写一个空测试 其中测试方法的名称指示我想要以待办事项列表的形式实现的内容 为了确保我不会忘记 我在正文中放置了一
  • GWT maven编译器输出目录

    我需要使用 Maven 插件设置 GWT 编译器的输出目录位置 我研究了 GWT 编译器和 gwt maven plugin 文档 但没有找到任何选项 例如 我有两个名为editor and consolegwt maven plugin
  • javascript 使用 var 值作为新 var 的名称

    如何使用数组键 文本值 来引用同名变量 jsFiddle http jsfiddle net gBD4s var cr au gen bn fmt str var sbASCtrls cr ContentRating au Gold gen
  • 如何使用前向填充Python重新采样

    我的数据框 df3 看起来像这样 Id Timestamp Data Group Id 0 1 2018 01 01 00 00 05 523 125 5 101 1 2 2018 01 01 00 00 05 757 125 0 101
  • 为什么浏览器在 OSX 上渲染 rgba 的方式不同?

    我试图编写一些颜色操作代码 并在 alpha 上停留了很长一段时间 然后我 2 小时后 意识到浏览器以不同的方式渲染 rgba 我创建了这个测试 http jsbin com adekez 2 http jsbin com adekez 2
  • string_view 真的会引发释放后使用错误吗?

    根据一篇文章 here https alexgaynor net 2019 apr 21 modern c wont save us and there https github com isocpp CppCoreGuidelines i
  • 列“在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中”

    我想显示该列B在我的下面的 SQL 中 但是当我将其添加到查询中时 它给出了以下错误 T2 B 栏 在选择列表中无效 因为它不包含在 聚合函数或 GROUP BY 子句 My code SELECT A COUNT B as T1 B FR
  • 图的 k 顶点连通性

    是否有任何伪代码实现可以显示如何计算图的 k 顶点连通性 我无法在这里发布代码this http www cs sunysb edu algorith files edge vertex connectivity shtml本书因版权问题
  • 如何使用 API 3.1.1 在 Maven 插件中使用 Aether (eclipse)?

    我正在使用 API v3 1 1 开发一个新的 Maven 插件 因为我需要升级到 Maven 3 1 1 并且需要使用 Aether 方式处理工件存储库 以及检索工件版本的完整列表 我正在使用 Eclipse Aether 0 9 0 M
  • 使用透镜实现 3 种及以上类型之间的同构

    灵感来自关于ADT之间的多态函数的一个问题 https stackoverflow com q 25192250 596361我试图在多个 不仅仅是 2 个 类型之间创建同构 这样每次我需要同构但不相同的类型时 我都可以在代码中添加一些co
  • 使用 CSS 和 SVG 的钻石菜单项

    我想用 HTML CSS 编写以下设计代码 到目前为止我所做的是 我用以下方法做到了 a links SVG 作为背景 CSS中的绝对位置和translate x y 属性 请检查这个fiddle http jsfiddle net sha
  • 提交自动填充(密码输入字段)

    I want to submit an autofilled password form using a userscript tampermonkey in chrome However it doesn t work the field
  • 坂本算法查找星期几的正确性

    我正在使用坂本算法来找出给定日期的星期几 谁能告诉我这个算法的正确性吗 我只想要2000年到2099年的这个 该算法来自维基百科 http en wikipedia org wiki Determination of the day of
  • 从证书导入 RSA 公钥

    我们的客户将其公共 RSA 密钥存储在证书中 我们需要在 WinRT 应用程序中硬编码此密钥 以便我们可以加密客户端 但是 我们在将密钥导入 CryptographicKey 类的实例时遇到问题 我们在 RSAProvider 上使用 Im
  • Java正则表达式从字符串中删除重复的子字符串

    我正在尝试构建一个正则表达式来 减少 Java 字符串中重复的连续子字符串 例如 对于以下输入 The big black dog big black dog is a friendly friendly dog who lives nea