删除一行中重复的相同字符

2024-04-04

我正在尝试创建一种方法,该方法可以从字符串中删除所有重复项,或者根据参数仅在一行中保留相同的 2 个字符。

例如:

helllllllo -> helo

or

helllllllo -> hello- 这保留了双字母

目前我通过执行以下操作删除重复项:

private String removeDuplicates(String word) {
    StringBuffer buffer = new StringBuffer();
    for (int i = 0; i < word.length(); i++) {
        char letter = word.charAt(i);
        if (buffer.length() == 0 && letter != buffer.charAt(buffer.length() - 1)) {
            buffer.append(letter);
        }
    }
    return buffer.toString();
}

如果我想保留双字母,我正在考虑使用像 private String 这样的方法removeDuplicates(String word, boolean doubleLetter)

When doubleLetter为 true 将会返回hello not helo

我不确定在不重复大量代码的情况下执行此操作的最有效方法。


为什么不直接使用正则表达式呢?

 public class RemoveDuplicates {
      public static void main(String[] args) {
           System.out.println(new RemoveDuplicates().result("hellllo", false)); //helo
           System.out.println(new RemoveDuplicates().result("hellllo", true)); //hello
      }

      public String result(String input, boolean doubleLetter){
           String pattern = null;
           if(doubleLetter) pattern = "(.)(?=\\1{2})";
           else pattern = "(.)(?=\\1)";
       return input.replaceAll(pattern, "");
      }
 }

 (.)    --> matches any character and puts in group 1. 
 ?=     --> this is called a positive lookahead. 
 ?=\\1  --> positive lookahead for the first group

总的来说,这个正则表达式会查找其自身后面的任何字符(正向前瞻)。例如 aa 或 bb 等。需要注意的是,实际上只有第一个字符才是匹配的一部分,所以在单词 'hello' 中,只匹配第一个 l ((?=\1) 部分是不属于比赛的一部分)。所以第一个 l 被一个空字符串替换,我们剩下 helo,它与正则表达式不匹配

第二个模式是同样的事情,但是这次我们展望第一组的两次出现,例如hello。另一方面,“hello”将不会被匹配。

在这里查看更多内容:Regex http://www.regular-expressions.info/lookaround.html

附:如果有帮助,请随意填写并接受答案。

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

删除一行中重复的相同字符 的相关文章

随机推荐