Comment puis-je convertir "AaabBbbc" en "AabBc" en Java à l'aide de regex?


J'ai essayé ceci:

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

Mais le résultat que j'ai obtenu était AabBbc mais b est déjà venu avant.

Comment puis-je supprimer le deuxième occurrence de b.


mise à Jour
Le but est de supprimer tous les alphabets en double après la première occurrence de cet alphabet.
Les alphabets majuscules et minuscules doivent également être traités différemment.

Author: Kartik Patodi, 2017-06-16

1 answers

La meilleure solution, bien que toujours étrange, utilisant regex que j'ai pu trouver jusqu'à présent est ci-dessous.

Si je peux trouver une solution qui ne nécessite pas d'inverser la chaîne, je vais le mettre à jour.

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

Remarque: Comme indiqué dans les commentaires, il est probablement plus logique d'utiliser une solution qui n'implique pas du tout d'expression régulière, voir link ... c'était amusant de toute façon: D

 1
Author: Jay, 2017-06-18 17:10:12