Was ist der beste Weg, um eine Textzeile in vordefinierte Variablen haben StringTokenizer bis aufgeteilt

StackOverflow https://stackoverflow.com/questions/236387

  •  04-07-2019
  •  | 
  •  

Frage

Ich bin mir nicht sicher, ob der Titel ist sehr klar, aber im Grunde, was ich tun muß, um eine Textzeile aus einer Datei gelesen und spaltete es in 8 verschiedene String-Variablen auf. Jede Zeile wird die gleichen acht Stücke in der gleichen Reihenfolge (Titel, Autor, Preis, etc). Also für jede Textzeile, möchte ich mit acht Saiten enden.

Das erste Problem ist, dass die letzten beiden Felder in der Zeile können oder nicht vorhanden sein können, so muß ich etwas mit stringTokenizer.hasMoreTokens tun, sonst wird es messily sterben, wenn Felder 7 und 8 sind nicht vorhanden.

Ich würde im Idealfall mag es die for-Schleife in einer Weile zu tun, aber ich bin nicht sicher, wie diese Schleife zu sagen, was die Reihenfolge der Felder sein wird, so kann es alle 8 (oder 6) Saiten richtig füllen . Bitte sagen Sie mir, es gibt einen besseren Weg, dass die Verwendung von 8 if-Anweisungen verschachtelt!

EDIT: Die String.split Lösung auf jeden Fall ein Teil davon scheint, so will ich, dass anstelle von StringTokenizer verwenden. Aber ich bin noch nicht sicher, was der beste Weg, um die einzelnen Strings in den Konstruktor der Fütterung. Wäre der beste Weg, um die Klasse zu haben ein Array erwartet, und dann nur in dem Konstruktor so etwas zu tun:

line[1] = isbn;
line[2] = title;
War es hilfreich?

Lösung

Der beste Weg ist kein StringTokenizer zu verwenden überhaupt, aber verwenden String Split Methode. Es gibt ein Array von Strings, und Sie können die Länge von dem bekommen.

Für jede Zeile in der Datei, die Sie folgendes tun:

String[] tokens = line.split("#");

tokens haben nun 6 - 8 Strings. Verwenden Sie tokens.length(), um herauszufinden, wie viele, dann erstellen Sie Ihr Objekt aus dem Array.

Andere Tipps

Ist das eine CSV oder ähnliche Datei durch Zufall? Wenn ja, gibt es Bibliotheken, Ihnen zu helfen, zum Beispiel Apache Commons CSV (Link auf Alternativen auf ihrer Seite auch). Es wird erhalten Sie einen String [] für jede Zeile in der Datei. Überprüfen Sie einfach die Größe des Arrays zu wissen, was optionale Felder vorhanden sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top