java - 如何替换字符串中的 N 个匹配项?

标签 java groovy

那么,如何在 groovy(或 java)中做到这一点?我寻找这样的东西:

someString.replaceN(/(?<=\p{L}) (?=\p{L})/, '', 3) // replace first 3 matches

目前,我只找到了这个愚蠢的解决方案:

(0..2).each { s = s.replaceFirst(/(?<=\p{L}) (?=\p{L})/, '') }
<小时/>

在其他语言中,这很简单:

最佳答案

我认为你所追求的是

3.times { s = s.replaceFirst(/(?<=\p{L}) (?=\p{L})/, '') }

或者,如果您更频繁地需要它,您也可以轻松地将方法添加到 String 类,例如

String.metaClass.replace << { pattern, replacement, n ->
    def result = delegate
    n.times { result = result.replaceFirst pattern, replacement }
    result
}

someString.replace(/(?<=\p{L}) (?=\p{L})/, '', 3)

关于java - 如何替换字符串中的 N 个匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39371610/

相关文章:

ant - groovyc ant 任务失败并出现 fork ="true"

java - JFrame:如何禁用窗口大小调整?

javascript - 从 cordova java 文件调用 javascript 函数

java - 在文件中添加一个段落

regex - 正则表达式使用正则表达式查找子字符串

grails - 数据库查询的空检查groovy方式结果

java - Android工作室: How do I update a textview in a recyclerview when an item from the database is deleted?

java - 如何在 Spring 将@Scheduled(cron) 与SpEL 一起使用?

grails - Groovy 列表根据两个标准排序

regex - 如何使用 Groovy 的 replaceFirst 和闭包?