Java RegExp Horror

24 06 2008

Bin ich gerade drauf gestoßen, da ich den Apache TCPMonitor Quellcode etwas anpassen musste – RegExp in Java, um alle Whitespaces zwischen XML-Tag-Ende und nächstem XML-Tag-Anfang zu löschen (das XML-Dokument ist in diesem Fall in der String variable “input” – das Ergebnis soll auch wieder da hin):

input = java.util.regex.Pattern.compile(">\\s+<").matcher(input).replaceAll("><");

Da läuft einem ein eiskalter Schauer über den Rücken. *schüttel* ist das hässlich :)
Das gleiche mal vergleichsweise in Perl:

$input =~ s/>\s+</></;


Aktionen

Information

10 Antworten

25 06 2008
q-pain

java is the ebil! das wissen wir doch. aber das du hier immer schon heimlich die perl-flagge schwenkst haben wir auch schon bemerkt :)

25 06 2008
fok

Ach, auch als Java-Hasser muss ich jetzt mal protestieren: Beides die gleiche Wixe, nur im ersten Fall lesbarer und weniger anfällig gegen Tippfehler. Die Nichtverwendung eines passenden Imports ist natuerlich zusatzlich unlegitime Meinungsbeeinflussung: Du gibt’s die übersichtliche Struktur einer Sprache als unnøtige Komplexität aus…

26 06 2008
kozen

ich finds süß :)

27 06 2008
escx

fokki schoki:
a) natürlich hab ich den (fehlende) Import an der Stelle nur mal so eingeflochten (in meinem Code brauchte ich aber in der Tat keine weitere Klasse aus dem util-Package).

b) Du findest also eine Regexp übersichtlicher in der man, um z.B. eine Character-Class zu matchen nochmal locker einen weiteren Backslash davor hauen muss? Das ist imho das unübersichtlichste an dem ganzen Ding. Stell dir vor ich möchte sowas matchen wie \.\\\t\-\s
(Achtung: dies ist ein konstruiertes Beispiel – da ich gerade zu faul bin, mir einen tatsächlichen Anwendungsfall auszudenken)

29 06 2008
fok

Ja, deswegen nimmt man statt Java ja auch lieber C#/.NET, da kann man sich das Escapen ersparen:

input = RegExp.Replace( input, @”>\s+<” );

29 06 2008
fok

Grr, da wurde was verschluckt:

input = RegExp.Replace( input, @">\s+<" );

29 06 2008
fok

Dammit, bloedes WordPress:

input = RegExp.Replace( input, @">\s+<", "><" );

29 06 2008
fok

Ja, genau so soll es aussehen. :)

29 06 2008
fok

<”, “> wurde von WP offenbar als Tag rausgefiltert…

29 06 2008
fok

Oehm, s/RegExp/Regex/ fuer den Klassennamen… :) Und es fehlt natuerlich noch der Namespace: “use System.Text.RegularExpressions;”, aber duerfte ja klar sein.

Und zum Abschluss, was ich immer gerne sage: .NET ist das, was Java immer sein wollte! :)

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Log Out / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Log Out / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Log Out / Ändern )

Verbinde mit %s




Follow

Get every new post delivered to your Inbox.