2016-11-03 5 views
0

ich rund 10 Anzahl von CSV-DateienTokens beginnen mit doppelten Anführungszeichen durch einige Token gefolgt und mit doppelten Anführungszeichen beenden, in ein Token

enter image description here

und tun tokenization bin Parsen. So ist der vierte Token ‚Seitentitel‘ manchmal mit doppelten Anführungszeichen beginnen ("). Dafür nehme ich besonders darauf, wie diese

String page = st.nextToken(); 
if(page.startsWith("\"")) 
{ 
     String s; 
     while(!(s=st.nextToken()).endsWith("\"")) 
     { 
     System.out.println(page); 
     page += (","+s); 
     System.out.println(page); 

    } 
    page += (","+s); 
    page = page.substring(0, page.length()); 
} 

Ich weiß nicht, wo ich Fehler mache, aber ich will Token lesen, die beginnen mit doppelten Anführungszeichen durch einige Token gefolgt und am Ende mit doppelten Anführungszeichen in ein Token wie diese

„Liste der lesben, Homosexuell, bisexuelle oder Transgender-bezogene Filme des Jahres 2012“

Aber ich bin immer nur " Liste der lesbischen, schwulen

+1

Verwenden Sie eine CSV-Parsing-Bibliothek. –

+0

In einem CSV-Feld "..." können auch Zeilenumbrüche auftreten, möglicherweise nicht CR-LF, sondern LF. Überprüfen Sie, ob es ein nächstes Feld "bisexuell" gibt. Überprüfen Sie die Daten in einem Programmiereditor (Notepad ++ oder ähnliches). –

+0

Übrigens, String-Verkettung, mit +, + = ist wirklich langsam; versuchen Sie einen StringBuilder, wenn alles funktioniert. –

Antwort

0

Statt rollin Wenn Sie Ihren eigenen Parser verwenden, können Sie eine Bibliothek wie OpenCSV verwenden. Sie müssen die folgenden

a) In Abhängigkeit tun, wenn Sie Maven verwenden

<dependency> 
     <groupId>net.sf.opencsv</groupId> 
     <artifactId>opencsv</artifactId> 
     <version>2.3</version> 
    </dependency> 

i die folgenden Beispieldaten verwendet haben, um zu illustrieren, wie data.csv auf WD gespeichert

one , two , three 
four,five,"read , these , numerals" 

c) Beispielcode

CSVReader reader = new CSVReader(new FileReader("data.csv")); 
    String [] nextLine; 
    while ((nextLine = reader.readNext()) != null) { 
     // nextLine[] is an array of values from the line 
     System.out.println("Column 1 :"+nextLine[0]); 
     System.out.println("Column 2 :"+nextLine[1]); 
     System.out.println("Column 3 :"+ nextLine[2]); 
    } 

} 

druckt:

Column 1 :one 
Column 2 : two 
Column 3 : three 
Column 1 :four 
Column 2 :five 
Column 3 :read , these , numerals 
Verwandte Themen