?
ich hab das mal mit ner map für token/replacement gelöst, ging recht flott. zumindest schneller, als x aufrufe von replaceAll.
mittels String#substring hab ich nen fenster durch den zielstring laufen lassen. das fenster startet mit der länge des kleinsten tokens, jeden durchlauf wird geprüft, ob das aktuelle fenster einem token entspricht (mittels der token map). ist das der fall, wird das replacement in den ausgabepuffer geschrieben und das fenster beginnt wieder erneut beim folgenden zeichen, ansonsten wird das fenster um ein zeichen erweitert. wird das fenster größer, als der größte token, wird ein zeichen links fallen gelassen und direkt in den ausgabepuffer geschrieben.