有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何使用正则表达式将Java中的“aaabbbc”转换为“AabBc”?

我试过这个:

str.replaceAll("(.)\\1+", "$1");

但是我得到的结果是Aabbbc,但是b之前就已经出现了

如何删除第二次出现的b


更新
其目的是在第一次出现字母表后删除所有重复的字母表。
同时,大写字母和小写字母也要区别对待


共 (1) 个答案

  1. # 1 楼答案

    到目前为止,我能想到的使用正则表达式的最佳解决方案(尽管仍然很奇怪)如下所示

    如果我能找到一个不需要反转字符串的解决方案,我会更新这个

    RegexTest.java

    import java.lang.StringBuilder;
    
    public class RegexTest {
    
        public static String removeDupeLetters(String input) {
            // Because look-behinds have to be fixed width, we have to use look-aheads instead.
            // As a result of that we'll have to reverse the string and start from the end. (And then reverse the result again)
            return reverseString(reverseString(input).replaceAll("([A-Za-z])(?=.*\\1)", ""));
        }
    
        // helper function for reversing a String
        public static String reverseString(String input) {
            return new StringBuilder(input).reverse().toString();
        }
    
        public static void main(String[] args) {
            final String[] inputs = {"AaabBbc", "Banana", "Semester", "AaaaaaaaAaaaaa"};
            for (String input : inputs) {
                System.out.println("Input:  " + input);
                System.out.println("Output: " + removeDupeLetters(input));
                System.out.println();
            }
        }
    }
    

    javac RegexTest.java && java RegexTest

    Input:  AaabBbc
    Output: AabBc
    
    Input:  Banana
    Output: Ban
    
    Input:  Semester
    Output: Semstr
    
    Input:  AaaaaaaaAaaaaa
    Output: Aa
    

    注意:正如评论中指出的,使用一个根本不涉及正则表达式的解决方案可能更有意义,请参见link。。。不过还是很有趣:D