Regex und StringBuffer: Problem mit TAB-Codierung

Status
Nicht offen für weitere Antworten.

Macro

Mitglied
Moin Moin.
Also erst mal eine kleine Beschreibung:

Ich habe ein Tool welches jsp-Seiten nach bestimmten Tags durchforstet und in dieses dann wiederum Werte bestimmter Attribute ersetzt.
Dazu durchsuche ich mt bestimmten regulären Ausdrücken den Content-String und an Stellen die gefunden werden speichere ich die Start-/EndePostition in seperaten ArrayListen. Ist die Suche abgeschlossen beginne ich den String von hinten aufzuarbeiten und die Teilstrings (definiert durch Start und Ende in den Listen) zu ersetzen.

Das Problem ist, dass die Regex für einen Tabulator mehrere Leerzeichen nimmt, aber der StringBuffer das Steuerzeichen \t. Das bringt natürlich meine Positionslisten völlig durcheinander.

Beispiel:
Vor dem ersetzen
Code:
<vcc:tableComponent name="VGEL_TABLE" headingRowCount="2" columnCount="7" rowCount="10">
	<vcc:headingCellProperty column="0" row="0" rowSpan="2" value="Baureihe" width="93" sorted="true" />
Nach dem ersetzen
Code:
<vcc:tableComponent name="VGEL_TABLE" headingRowCount="2" columnCount="7" rowCount="10">
	<vcc:headingCellProperty column="0" row="0" rowSpan="2" value="BaModel serieswidth="93" sorted="true" />
Da knallts: BaModel serieswidth

Wenn der jsp-Entwickler anstatt eines Tabs am Anfang einfache Leerzeichen einfügt funktioniert alles einwandfrei.

Daher meine Frage: Wie könnte ich dieses Problem lösen (ist wichtig und nicht mehr viel Zeit)? Kann man mit einer anderen Codierung etwas erreichen oder wäre ein Workaround denkbar?

Thx
 
Habs erst mal so gelöst:
Code:
germanContent = sb.toString.replaceAll("\t", "  ");
Damit sind alle TAB-Steuerzeichen entfernt. Ist aber nicht die eleganteste Lösung (und auch etwas langsamer wenn man das für 2000 files macht).
 
Nimm nicht die Methode von String, sondern diese...Macht ziemlich viel bei der Performance aus, da keine Regexe benutzt werden.

Code:
	public String replaceAll(String string, String search, String replace) {
		int start = 0;
		int slength = search.length();
		StringBuffer buffer = new StringBuffer();		
		for (int pos = 0; (pos = string.indexOf(search, start)) > -1; start = pos + slength) {
			buffer.append(string.substring(start, pos)).append(replace);
		}
		return buffer.append(string.substring(start)).toString();
	}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben