我怎样才能转换;aaabbbc";至;AabBc“;在Java中使用正则表达式?

我怎样才能转换;aaabbbc";至;AabBc“;在Java中使用正则表达式?,java,regex,Java,Regex,我试过这个: str.replaceAll("(.)\\1+", "$1"); 但是我得到的结果是Aabbbc,但是b之前就已经出现了 如何删除第二次出现的b 更新 其目的是在第一次出现字母表后删除所有重复的字母表。 此外,大写字母和小写字母的处理方式也将有所不同。目前为止,我能想到的使用正则表达式的最佳解决方案(尽管仍然很奇怪)如下所示 如果我能找到一个不需要反转字符串的解决方案,我会更新它 RegexTest.java import java.lang.StringBuilder; p

我试过这个:

str.replaceAll("(.)\\1+", "$1");
但是我得到的结果是Aabbbc,但是b之前就已经出现了

如何删除第二次出现的b


更新
其目的是在第一次出现字母表后删除所有重复的字母表。

此外,大写字母和小写字母的处理方式也将有所不同。

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

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

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

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

逻辑是什么?您想从
Aaa
中获取
Aa
,但您想将
Bbb
变成
B
。要澄清/更新您的问题,请使用选项。如果我理解正确,您想删除字符串中先前出现的所有字符吗?如果是这样,这真的不是正则表达式的任务。
str.replace(“aaabbbc”,“AabBc”)
符合您所述的要求。这是充分说明您的需求的一个教训。我们谁也不知道你到底想应用什么规则。你能告诉我们X问题而不是Y问题吗(参见)