java - 使用正则表达式用修改后的字符替换字符串中的序列

标签 java regex string replace

我正在尝试解决 codingbat使用正则表达式的问题,无论它是否适用于网站。

到目前为止,我有以下代码,它没有在两个连续的相等字符之间添加 *。相反,它只是推平它们并用一组字符串替换它们。

public String pairStar(String str) {
    Pattern pattern = Pattern.compile("([a-z])\\1", Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(str);
    if(matcher.find())
    matcher.replaceAll(str);//this is where I don't know what to do
    return str;
}

我想知道如何继续使用正则表达式并替换整个字符串。如果需要,我认为递归系统会有所帮助。

最佳答案

这个有效:

while(str.matches(".*(.)\\1.*")) {
    str = str.replaceAll("(.)\\1", "$1*$1");
}
return str;

正则表达式的解释:

搜索正则表达式(.)\\1:

  • (.) 表示“任何字符”(.),括号创建一个组 - 第 1 组(第一个左括号)
  • \\1,在正则表达式中是 \1(java 文字 String 必须用另一个反斜杠转义一个反斜杠)表示“第一组”——这种术语称为“反向引用”

所以一起 (.)\1 表示“任何重复的字符”


替换正则表达式 $1*$1:

  • $1 术语表示“作为第 1 组捕获的内容”


递归解决方案:

从技术上讲,该站点上要求的解决方案是递归解决方案,因此这里是递归实现:

public String pairStar(String str) {
    if (!str.matches(".*(.)\\1.*")) return str;
    return pairStar(str.replaceAll("(.)\\1", "$1*$1"));
}

关于java - 使用正则表达式用修改后的字符替换字符串中的序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13735292/

相关文章:

java - 无法获取此分隔符类

java.lang.NoSuchFieldError : INSTANCE

java - 将消息摘要(哈希)附加到文件的方法

c# - 将字符串从托管 C# 传递到托管 C++

regex - 如何使用htaccess从网址中删除文件夹名称

java - 需要 java 正则表达式来匹配具有多个空格的子字符串,只有一个标点符号

java - 为单个字符串设置字体?

java - 如何使用 Spring Boot 注入(inject)模拟?

java - IntelliJ IDEA 没有将我的 java 文件识别为可运行文件,而是想要运行类文件。关于如何修复的任何想法?

python - 如何根据 python pandas 中不同行的字符串形式创建新列