StringTokenizer überspringt leerfeld

Status
Nicht offen für weitere Antworten.

Manfred

Bekanntes Mitglied
Hi!

Ich habe eine CSV Datei! Manchmal sind Felder leer also z.B.

name nachname strasse
toni;;hauptstrasse

Der Tokenizer liefert mir dann aber nur 2 Felder obwohl ich das leerfeld auch brauche!

Gibts da was??

Danke!
 

mic_checker

Top Contributor
Du meinst im zweiten Fall:
Da müsste er ja dann folgendes liefern
1 feld: Toni
2 feld: (Leerfeld)
3 Feld: Hauptstrasse

wobei dann halt nachname leer bleibt ?

will nur sichergehen das ich dich richtig verstanden hab...

"\n" gehört ja default-mäßig zu den Delimitern bei StringTokenizer dazu, aber mittlerweile sollte man eher String.split() bzw Regex verwenden.
 

Lazarus

Mitglied
Hallo habe ein ähnliches Problem. Hab erst mit String Tokenizer gearbeitet. Und da ist das selbe passiert wie bei dir. Dann bin ich auf split umgestiegen. Der hat dann wenn nichts drinn stand ne leere Zichenkette zurükckgegeben. Nun hab ich aber daß Problem daß dieser keine Sonderzeichen wie * oder + oder Punkt mag. Entweder gibt es falsche Ergebnisse oder ein Pattern Fehler. Das mit Tokenízer denke ich geht nicht. Wenn muss mindestens ein Leerzeichen in dem Feld sein, damit es angezeit wird bzw in das StringArray kommt das durch Tokenizer gebildet wird.

Grüße Lazarus
 

Wildcard

Top Contributor
Lazarus hat gesagt.:
Nun hab ich aber daß Problem daß dieser keine Sonderzeichen wie * oder + oder Punkt mag. Entweder gibt es falsche Ergebnisse oder ein Pattern Fehler.
Die API hätte dir verraten das split einen RegEx erwartet. * , + und . sind RegEx Steuerzeichen die maskiert werden müssen!
 

Lazarus

Mitglied
split verwendet intern nichts anderes als das Pattern objekt. Somit ist das eigentlich der selbe Lösungsansatz
aber mittlerweile sollte man eher String.split() bzw Regex verwenden

In der String-Klasse gibt es auch die Funktion split(). Sie ist eine Objektmethode, die die aktuelle Zeichenkette, die das String-Objekt repräsentiert, zerlegt. Diese Methode benötigt jetzt umgekehrt den regulären Ausdruck als Argument. Die Implementierung delegiert jedoch die eigentliche Arbeit an das Pattern-Objekt:
Java ist auch eine Insel
 

Lazarus

Mitglied
Wildcard hat gesagt.:
Lazarus hat gesagt.:
Nun hab ich aber daß Problem daß dieser keine Sonderzeichen wie * oder + oder Punkt mag. Entweder gibt es falsche Ergebnisse oder ein Pattern Fehler.
Die API hätte dir verraten das split einen RegEx erwartet. * , + und . sind RegEx Steuerzeichen die maskiert werden müssen!

Steht in der Api auch eine Liste der Steuerzeichen. Weil Komma nimmt er ohne Problem, das - und auc % ich habe zwar irgendwo mal gelesen, daß diese Sonderzeichen maskiert werden müssen aber ich habe keine Ahnung welche ich nun maskieren mus
 

Lazarus

Mitglied
sieht aber sehr kompliziert aus. Kann ich irgedwie afragen welches Zeichen vom Benutzer eingegeben wurde
um zu wissen ob eine Maskierung notwedig ist?

\p{Punct} Punctuation: One of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

Ich mein es macht ja kein Sinn erst mal sämtliche obigen Zeichen in einer Schleife durchzugehen.

Grüße Lazarus
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben