2010-09-30 8 views
1

J'ai un problème avec Java Scanner.useDelimiter() qui délimite "".Java Scanner.useDelimiter() problème avec ""

Je suis en train d'utiliser le scanner pour lire une colonne CSV CSV file.The ont 2 (Nom, Description) et le champ Description ont de longs paragraphes (avec, et.)

Je me demande ce que délimiteur ce cas.

+1

La description peut-elle contenir de nouvelles lignes? – aioobe

+0

peut la traduction avoir des virgules dans? –

+1

thegravytalker: oui, l'op déclare "champ de description ont de longs paragraphes (avec, et.)" – aioobe

Répondre

3

Que diriez-vous quelque chose comme

Scanner s = new Scanner("name1 lorem, some description\n" + 
         "name2 ipsum, some other, description \n" + 
         "name3 dolor, a third. description\n"); 

while (s.hasNextLine()) { 
    String[] cols = s.nextLine().split(",", 2); // limit to two columns. 
    System.out.println("col1: " + cols[0] + ", col2:" + cols[1]); 
} 

Prints:

col1: name1 lorem, col2: some description 
col1: name2 ipsum, col2: some other, description 
col1: name3 dolor, col2: a third. description 

Alternativement, si vous insistez sur l'utilisation du scanner tout le chemin, vous pourriez faire quelque chose comme

Scanner s = new Scanner("name1 lorem, some description\n" + 
         "name2 ipsum, some other, description \n" + 
         "name3 dolor, a third. description\n"); 

s.useDelimiter(","); 

while (s.hasNext()) 
    System.out.println("col1: " + s.next() + ", col2:" + s.skip(",").nextLine()); 

(Ce qui donne le . Même sortie)

1

Si vous avez seulement deux colonnes, séparées par une virgule, une alternative facile à Scanner est d'utiliser simplement String.substring:

int i = s.indexOf(','); 
String name = s.substring(0,i); 
String desc = s.substring(i+1); 
+1

ou String.split – Thilo

2

Il suffit d'utiliser une bibliothèque pour csv lecture/écriture comme OpenCSV et vous n'avez pas à réinventer la roue :)

+0

Cela prendra également soin de guillemets et de guillemets entre guillemets dans un champ et des chaînes multilignes et ainsi de suite. – Thilo