Wie mehrere Regex aufrufe vermeiden!
-
Hi,
der Titel sagt fast schon alles. Angenommen es gibt eine Menge von Strings in der einzelne oder verschiedene Zeichen einer Zeichenmenge auftauchen können welche ersetzt werden sollen. Die Regexp für die Zeichenmenge würde wie gewöhnlich [abcd1234] aussehen.
Theoretisch könnte ich folgendes tun:
x.replaceAll("z","r");
x.replaceAll("y","t");
....Nur würde sich das etwas summieren und es wäre sicher auch nicht so effizient.
Wie löst man das möglichst effizient? Eine Möglichkeit die mir einfällt wäre den String Zeichen für Zeichen durchzugehen und mit den zeichen eine Hashmap zu indizieren welche aus "Zeichen, Replacement" besteht und das Zeichen dann zu ersetzen. Das wäre aber auch ziemlich viel Stringgefummel in Java. Ich brauch es auch recht flott, deshalb verspreche ich mir von der Regexp-Möglichkeit mehr, da die hoffentlich auch recht effizient implementiert ist. Falls jmd eine Idee hat immer her damit.
tt
-
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.