tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
8
ZUGRIFFE
2134
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Conners Conners ist offline Mitglied Gold
    Registriert seit
    Apr 2008
    Beiträge
    102
    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ß
    Conners
     
    Es gibt 10 verschiedene Arten von Menschen. Die, die das hier lesen können und die, die es auch verstehen :)

  2. #2
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    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ß
    Ollie
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  3. #3
    Conners Conners ist offline Mitglied Gold
    Registriert seit
    Apr 2008
    Beiträge
    102
    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 :)

  4. #4
    Avatar von takidoso
    takidoso takidoso ist offline Mitglied Brillant
    Registriert seit
    Aug 2004
    Ort
    Kömigstein
    Beiträge
    911
    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)
     

  5. #5
    Conners Conners ist offline Mitglied Gold
    Registriert seit
    Apr 2008
    Beiträge
    102
    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 :)

  6. #6
    Adrian_Broher Adrian_Broher ist offline Mitglied Gold
    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.

  7. #7
    Conners Conners ist offline Mitglied Gold
    Registriert seit
    Apr 2008
    Beiträge
    102
    Tags, geparsed aus HTML-Text. Also am ehesten Werte.
    Ich muss lediglich vergleichen.

    Ein String sieht z.B. bei mir so aus "&lt;p&gt;", also "<p>" nur so als Beispiel.

    Gruß
    Conners
    Geä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 :)

  8. #8
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Code 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

  9. #9
    Conners Conners ist offline Mitglied Gold
    Registriert seit
    Apr 2008
    Beiträge
    102
    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

  1. Alternative zum FI ?
    Von Bullet1990 im Forum Ausbildung & Beruf
    Antworten: 6
    Letzter Beitrag: 31.10.08, 16:58
  2. Alternative zu GET?
    Von Vertigo21 im Forum PHP
    Antworten: 5
    Letzter Beitrag: 09.06.06, 19:15
  3. Alternative zum Pop-Up
    Von xthetronx im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 20.09.04, 13:11
  4. Alternative pdf.ocx
    Von _tYze im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 16.09.04, 09:35
  5. Alternative zu \n ****?
    Von DerDude im Forum PHP
    Antworten: 6
    Letzter Beitrag: 12.07.01, 03:13