aus String extrahieren bis zu gewissem Zeichen

Status
Nicht offen für weitere Antworten.

magic_halli

Bekanntes Mitglied
Hi,

ich gehe ein Textfile zeilenweise durch und möchte hierbei Variablen extrahieren, denen immer ein Vergleichsoperator folgt, bspw.
Code:
SIGMA_V>SIGMA_ZUL
S_B<S_BERF
S_BV=S_BVERF
Ich will mir hierbei nur die linke Seite vom Vergleichsoperator in eine ArrayList speichern. Jetzt weiß ich aber vorher nicht, welche Vergleichsoperatoren vorkommen, sodass die ganze Sache relativ dynamisch sein muss.
Bisher habe ich das mal so gemacht:
Code:
...
ArrayList alNachweisSpalten = new ArrayList();
//jede Zeile der Textdatei durchgehen
while ((line = buff.readLine()) != null) {
     //Substring in ArrayList speichern
     alNachweisSpalten.add( line.substring(0, line.indexOf(">")) );
}
Hierbei habe ich ja erstmal als lastIndex im Substring das '>' fest vereinbart. Wie kann ich aber die ganze Sache irgendwie dynamisch gestalten, sodass alle möglichen Zeichen bei lastIndex in Betracht gezogen werden würden???
Hat jemand ne Idee?

Danke und Gruß
 
StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.
 
Mh, ok. Ich hab jetzt nen Tokenizer in Spiel gebracht, der mir an den definierten Zeichen den String zerlegt.
Code:
...
ArrayList alNachweisSpalten = new ArrayList();
//jede Zeile der Textdatei durchgehen
while ((line = buff.readLine()) != null) {

     StringTokenizer tk = new StringTokenizer(line, "< > =");
     while (tk.hasMoreTokens()){
          String tokens = tk.nextToken();
     }

     //Substring in ArrayList speichern - muss jetzt auf Tokenizer irgendwie angepaßt werden
     alNachweisSpalten.add( line.substring(0, line.indexOf(">")) );
}
Jetzt stehen ja aber in 'tokens' alle Teile meines Gesamtstrings (bzw. der Zeile). Ich möchte aber in jeder Zeile nur den ersten Token in die ArrayList speichern.
Ich weiß nicht recht, wie ich das machen muss. ???:L
 
Code:
String firstToken;

if(line.contains(">")
              String firstToken = line.substring(0,line.indexOf(">"));

else if(line.contains("<")
              String firstToken = line.substring(0,line.indexOf(">"));

else 
     throw new Exception("Data Corrupt");
 
damit kannste deinen Tokenizer wegwerfen 🙂

ggf. Refactoren und ne eigene Exception klasse erstellen..
 
magic_halli hat gesagt.:
Mh, ok. Ich hab jetzt nen Tokenizer in Spiel gebracht, der mir an den definierten Zeichen den String zerlegt.
Code:
...
ArrayList alNachweisSpalten = new ArrayList();
//jede Zeile der Textdatei durchgehen
while ((line = buff.readLine()) != null) {

     StringTokenizer tk = new StringTokenizer(line, "< > =");
     while (tk.hasMoreTokens()){
          String tokens = tk.nextToken();
     }

     //Substring in ArrayList speichern - muss jetzt auf Tokenizer irgendwie angepaßt werden
     alNachweisSpalten.add( line.substring(0, line.indexOf(">")) );
}
Jetzt stehen ja aber in 'tokens' alle Teile meines Gesamtstrings (bzw. der Zeile). Ich möchte aber in jeder Zeile nur den ersten Token in die ArrayList speichern.
Ich weiß nicht recht, wie ich das machen muss. ???:L

Du kannst das 2. "while" durch ein "if" ersetzen.
 
Danke für die Tips... ich habe es jetzt so gelöst und es funktioniert:
Code:
...
ArrayList alNachweisSpalten = new ArrayList();
//jede Zeile der Textdatei durchgehen
while ((line = buff.readLine()) != null) {
     Pattern pattern = Pattern.compile("[<>=!]");
     alNachweisSpalten.add(pattern.split(line)[0]);
}
Über den Tip mit StringTokenizer bin ich letztendlich hierauf gestoßen.
Dann greife ich einfach in meinem pattern.split auf die ersten Stelle ([0]) meines gespilitteten Strings zu und schon hab ich das Resultat wie gewünscht. 😀

Gruß
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben