ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
2134
2134
EMPFEHLEN
-
Hi,
ich habe einen HTML-Parser geschrieben, in dem sehr oft string-vergleiche stattfinden. Ich möchte den Code jetzt optimieren und hab mir überlegt statt if else else else else.... eine switch-case Anweisung einzubauen, leider funktioniert diese aber nur, soweit ich das verstanden hab, mit Integers bzw. Enums.
Gibt es noch andere Alternativen?
Bei mir sieht es im Code z.B. oft so aus:
Code :1 2 3 4 5 6 7
if (mystring.equals(string2) else if (mystring.equals(string3) else if (mystring.equals(string4) else if (mystring.equals(string5) else if (mystring.equals(string6) else if (mystring.equals(string7) ...
Oder kann ich die zu vergleichenden Strings irgendwie als Int´s in nem enum packen?
Gruß
ConnersEs gibt 10 verschiedene Arten von Menschen. Die, die das hier lesen können und die, die es auch verstehen :)
-
29.10.08 11:11 #2
Wenn die Strings völlig dynamisch sind wirds schwer, aber warum wrappst du nicht zumindest die gesuchten Werte in ein Enum? Komplizierte Stringvergleiche sind eigentlich immer ein Anzeichen für mangelnde Abstraktion.
Gruß
OllieIn theory, there is no difference between theory and practice. In practice, there is!
www.olivergierke.de
-
Würd ich gerne machen, was aber wenn meine Strings z.B. so aussehen:
Code :1 2 3
public enum tags { <p>, </p> }
enums integrieren ja automatisch quotations marks oder?
EDIT:
Und selbst wenn ich die gesuchten Strings in ein enum packen wollte, müsste ich doch beim parsen jedesmal mit if-else rausfinden welcher enum genutzt werden soll oder?Geändert von Conners (29.10.08 um 11:44 Uhr)
Es gibt 10 verschiedene Arten von Menschen. Die, die das hier lesen können und die, die es auch verstehen :)
-
Ganz allgemein gesprochen würde ich, wenn ich viele viele Strings zu vergleichen habe, und diese womöglich noch dynamaisch sein könnten oder dürften, eine Map verwenden. Das ist zum einen dann keine lineare Suche mehr und verkürzt den Code auch ganz prima.
Geändert von takidoso (29.10.08 um 12:19 Uhr)
-
Ah zu spät gelesen. Nixdestotrotz soviele Strings sinds bei mir auch nicht. Ich schätz mal so 30 Stück.
Außerdem hab ich keine Ahnung was eine Map ist.
Ich hab jetzt folgendes gemacht:
Ich hab von jedem String den .hashCode() gebildet und in eine Switch(mystring.hashCode()) gelegt.
Als nächstes würd ich das mit nem enum verbinden, damit bei den case-Anweisungen keine Hashes mehr stehen.
Ist das sinnvoll?Es gibt 10 verschiedene Arten von Menschen. Die, die das hier lesen können und die, die es auch verstehen :)
-
29.10.08 14:24 #6
- Registriert seit
- Aug 2007
- Beiträge
- 166
Was stellen die Strings logisch da?
Befehle?
Einen Status?
Werte?I'm not slacking off!
My code's just compiling.
-
Tags, geparsed aus HTML-Text. Also am ehesten Werte.
Ich muss lediglich vergleichen.
Ein String sieht z.B. bei mir so aus "<p>", also "<p>" nur so als Beispiel.
Gruß
ConnersGeändert von Conners (29.10.08 um 14:30 Uhr)
Es gibt 10 verschiedene Arten von Menschen. Die, die das hier lesen können und die, die es auch verstehen :)
-
29.10.08 15:36 #8Code java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
public enum MyConstants { P("<p>"), H1("<h1>"); // Viele andere mehr private String text; private MyConstants(String text) { this.text = text; } public static MyConstants fromText(String text) { if (null == text) { return null; } for (MyConstant that : MyConstant.values()) { if (this.text.equals(that.text) { return that; } } return null; } }
Dein Client macht dann einfach mit fromText() aus dem String eine MyConstant und dann gehts ab in das switch Statement.
REINHAUN!In theory, there is no difference between theory and practice. In practice, there is!
www.olivergierke.de
-
Ah, das sieht sehr vielversprechend aus.
Ich danke dir Oliver!
edit: 2 Kleinigkeiten zu dem Code. this ist doch eine Art Referenzpointer oder? Also kann man den in statischen Funktionen doch net benutzen oder?
Und kann man null switchen?Geändert von Conners (04.11.08 um 09:07 Uhr)
Es gibt 10 verschiedene Arten von Menschen. Die, die das hier lesen können und die, die es auch verstehen :)
Ähnliche Themen
-
Alternative zum FI ?
Von Bullet1990 im Forum Ausbildung & BerufAntworten: 6Letzter Beitrag: 31.10.08, 16:58 -
Alternative zu GET?
Von Vertigo21 im Forum PHPAntworten: 5Letzter Beitrag: 09.06.06, 19:15 -
Alternative zum Pop-Up
Von xthetronx im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 20.09.04, 13:11 -
Alternative pdf.ocx
Von _tYze im Forum Visual Basic 6.0Antworten: 0Letzter Beitrag: 16.09.04, 09:35 -
Alternative zu \n ****?
Von DerDude im Forum PHPAntworten: 6Letzter Beitrag: 12.07.01, 03:13





Zitieren
Login





