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.
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