Parser: Flut von Variablen und if-Conditions eindämmen

Status
Nicht offen für weitere Antworten.

M.C.S.

Mitglied
Hallo,

ich möchte einen kleinen String-Parser schreiben, der mir 16 (in der Klasse fest definierte) Schlüsselworte ausliest und die dazugehörigen Values (durch TAB getrennt) speichert. Jetzt fällt mir dazu nur folgende Vorgehensweise ein:

Ich erstelle eine Klasse mit 16 Instanzvariablen.
Ich parse den String nach den Schlüsselworten.
Ich erstelle alle Getter, um auf die einzelnen Werte zugreifen zu können.

Genau an der Stelle bekomme ich Kopfschmerzen: So viele Variablen, und dann kommen beim Testen des Schlüsselwortes noch 16 if-Abfragen dazu, um den Value in der richtigen Variable zu speichern.

Geht das Ganze auch eleganter? Kann man (z.B. mit Hilfe von Reflections) Code einsparen und für mehr Übersicht sorgen?

Regards,
Marcus
 
Ganz verstanden, wie dein Algo läuft, habe ich nicht, aber: ich würde Arrays oder Listen verwenden, dann kannst du 10000 Schlüsselwörter machen, und benötigst lediglich 1 Schleife und 1 Instanzvariable :wink:

Für Listen: ArrayList ist praktisch. Du kannst aber auch Dinge die HashMap, TreeSet, ... angucken, in "java.util.*" findet man sehr viele nützliche Dinge.
 
Ich poste mal ein paar String-Schnippsel:

Kugelschreiber 5 Mülleimer 2 unerwünschte Stringschnipsel Tacker 2

Ich möchte jetzt auslesen, wie viele Kugelschreiber (5), Mülleimer (2) und Tacker (ebenfalls 2) ich habe. Die Klasse heißt z.B. "Büroausstattung". Anschließend möchte ich dann den Bestand z.B. in einer Datenbank wegspeichern.

Ich hatte erst an eine HashMap gedacht (und auch schon fast verwendet), allerdings wird es dann schwierig mit dem Weiterverarbeiten der Daten, sofern die zu verwendende Datenbank-Tabelle andere Spaltennamen verwendet als die obigen Schlüsselwörter.

Hilft dir das, mein Problem zu verstehen? Ich muss Schlüsselworte von Nicht-Schlüsselworten unterscheiden und später direkt auf diese zugreifen können.
 
Also wenn die Datenbank immer mal was anderes macht, ist sowieso alles verloren :wink:

Aber was dich z.B. an sowas wie folgendem Code hindert, weiss ich nicht:
Code:
Set<String> keywords = ... // die werden früher mal gesetzt.
String input = ...

Map<String, Integer> occurences= new HashMap<String, Integer>();
for( String keyword : keywords ){
  // ob der Algorithmus fest kodierte Strings verwendet, oder
  // Variablen - das macht ja keinen Unterschied
  int count = netterAlgorithmusZähle( input, keyword );

  occurences.put( keyword, count );
}

// und hier weiss man für jedes Keyword, was für eine Zahl dazugehört.

?
 
Hmm, mein Problem war wohl eher, dass ich die Möglichkeit übersehen habe, Datensätze Feld für Feld zu manipulieren. Ich war irgendwie darauf fixiert, alle Werte eines Datensatzes auf einen Rutsch aktualisieren zu müssen, aber das tut ja nicht unbedingt not.

Danke schön 🙂
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben