On se retrouve aujourd'hui pour la solution du précédent #KataOfTheWeek proposé par Nicolas en début de semaine !

La solution principale est clairement l'utilisation d'une pile (je viens de me rendre compte que c'est la même chose pour la semaine dernière), il faut juste parcourir la chaine de caractères et verifier les points énoncés.

public static String transformXML(String xml) {
    String retour = null;
    StringBuilder sb = new StringBuilder();
    String[] balises = xml.split("<");
    Stack<String> pile = new Stack<>();

    int n = 0;

    for (int i = 1 ; i < balises.length ; ++i) {
        String s = balises[i];
        if (s.startsWith("/")) {
            if (s.substring(1).equals(pile.peek())) {
                sb.append(')');
                n += s.length() + 1;
                pile.pop();
            } else {
                retour = "E " + n + " <" + s + " </" + pile.pop();
                i = balises.length;
            }
        } else {
            if (s.endsWith(">")) {
                sb.append("(" + s.substring(0, s.length() - 1));
                n += s.length() + 1;
                pile.push(s);
            } else {
                retour = "E " + n + " <" + s + " " + " Not a balise";
                i = balises.length;
            }
        }
    }
    if (retour == null) {
        retour = sb.toString();
    }
    return retour;
}

A bientôt pour un nouveau #KataOfTheWeek !