Qual è il modo migliore per fare in modo che stringTokenizer divida una riga di testo in variabili predefinite

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

  •  04-07-2019
  •  | 
  •  

Domanda

Non sono sicuro che il titolo sia molto chiaro, ma fondamentalmente quello che devo fare è leggere una riga di testo da un file e dividerlo in 8 diverse variabili stringa. Ogni riga avrà gli stessi 8 pezzi nello stesso ordine (titolo, autore, prezzo, ecc.). Quindi per ogni riga di testo, voglio finire con 8 stringhe.

Il primo problema è che gli ultimi due campi nella riga potrebbero essere o non essere presenti, quindi devo fare qualcosa con stringTokenizer.hasMoreTokens, altrimenti morirà in modo disordinato quando i campi 7 e 8 non sono presenti.

Vorrei idealmente farlo in un istante di for loop, ma non sono sicuro di come dire a quel loop quale sarà l'ordine dei campi in modo che possa riempire correttamente tutte le 8 (o 6) stringhe . Per favore, dimmi che c'è un modo migliore di usare 8 istruzioni if ??annidate!

EDIT: la soluzione String.split sembra decisamente parte di essa, quindi userò quella invece di stringTokenizer. Tuttavia, non sono ancora sicuro di quale sia il modo migliore di alimentare le singole stringhe nel costruttore. Il modo migliore sarebbe che la classe si aspettasse un array e quindi fare qualcosa del genere nel costruttore:

line[1] = isbn;
line[2] = title;
È stato utile?

Soluzione

Il modo migliore è non usare affatto StringTokenizer, ma usare split . Restituisce una matrice di stringhe e puoi ricavarne la lunghezza.

Per ogni riga del tuo file puoi fare quanto segue:

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

token ora avrà 6-8 stringhe. Usa tokens.length () per scoprire quanti, quindi crea il tuo oggetto dall'array.

Altri suggerimenti

L'espressione regolare è la strada. Puoi convertire la stringa in arrivo in un array di stringhe utilizzando il metodo split

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#split (java.lang.String)

Un'espressione regolare con i gruppi di acquisizione funzionerebbe per te? Puoi certamente rendere facoltative parti dell'espressione.

Potrebbe essere utile una riga di dati di esempio o tre.

È un file CSV o simile per caso? In tal caso, ci sono librerie che possono aiutarti, ad esempio Apache Commons CSV (link ad alternative anche sulla loro pagina). Ti darà una stringa [] per ogni riga nel file. Controlla le dimensioni dell'array per sapere quali campi opzionali sono presenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top