2016-10-25 4 views
-1

Ich habe CSV-Datei zu lesen, und ich in Zeichenfolge bin Speicherung und ich brauche Zeichenfolge bei jeder aufzuspalten „“ und meine Eingabe wird wieSplit String und speichern in Array

Name, ID, Beschreibung, EMAILID Micheal, 234655, "Test Beschreibung für die nächste Zeile Problem Dank und Grüße, Mike", Mike @ yahoo.com

Bitte helfen Sie mir damit.

Grüße, Vijay

enter code here 

import java.io.*; 
import java.util.logging.*; 
import java.util.ArrayList; 
import java.util.List; 
public class ReadingCSVFile { 

public static void main(String args[]) 
{ 
    StringBuilder sb =new StringBuilder(); 
    int n; 
    String inputStream; 
    String Name[] =new String[30]; 
    List l1 = new ArrayList(); 
    try 
    { 
     FileInputStream fis =new fileInputStream("C:/Users/vijaykumar.naga/Desktop/Abc.txt"); 
    FileOutputStream fos = new FileOutputStream("C:/Users/vijaykumar.naga/Desktop/Output.txt"); 
    int ch; 
    while((ch = fis.read()) != -1){ 
     sb.append((char)ch); 
    } 
    System.out.println("The InputString is " +sb.toString()); 
    String abcd =sb.toString(); 
     for(int i=0; i<30; i++) 
     { 
     l1.add(abcd.split(",")); 
     System.out.println("The Names are " +l1); 
      } 

     } 
    catch(Exception e) 
    { 

     } 
    } 

    } 
+2

Was ist das Problem mit dem aktuellen Ansatz? –

+0

Verwenden Sie StringTokenizer zu https://docs.oracle.com/javase/7/docs/api/java/util /StringTokenizer.html –

+0

Sie lesen also die ganze Datei und fügen einen Stringbuilder hinzu. dann teilen Sie das vollständige Ergebnis mit dem Zeichen "," 30 und fügen Sie die gleichen String [] - Werte (nicht die gleiche Referenz) in die Liste ein. Nicht sicher, was Sie erwartet haben – AxelH

Antwort

0

Bitte beachten Sie die Änderung des Codes mit einer Erklärung:

import java.io.*; 
import java.util.logging.*; 
import java.util.ArrayList; 
import java.util.List; 
public class ReadingCSVFile { 

public static void main(String args[]) 
{ 
    StringBuilder sb =new StringBuilder(); 
    int n; 
    String inputStream; 
    String Name[] =new String[30]; 
    List<String> l1 = new ArrayList<>(); //Use generics <> operator 
    try 
    { 
     FileInputStream fis =new fileInputStream("C:/Users/vijaykumar.naga/Desktop/Abc.txt"); 
    FileOutputStream fos = new FileOutputStream("C:/Users/vijaykumar.naga/Desktop/Output.txt"); 
    int ch; 
    while((ch = fis.read()) != -1){ 
     sb.append((char)ch); 
    } 
    System.out.println("The InputString is " +sb.toString()); 
    String abcd =sb.toString(); 
     /*for(int i=0; i<30; i++) 
     { 
     l1.add(abcd.split(","));   //This is wrong. abcd.split(",") will return String[] 
     System.out.println("The Names are " +l1); 
      } 

     }*****This loop is not needed*/ 
    //As you already read the content in abcd variable, do as follows 
    l1.addAll(Arrays.asList(abcd.split(","))); 

    catch(Exception e) 
    { 

     } 
    } 

    } 
+0

Er muss in Array speichern..nicht in Liste – Karthik

+0

Aber wenn er die Zeile als String [] in seine Liste speichern würde (wie im Original), änderst du hier ein bisschen mehr;) – AxelH

+0

@Karthik, wenn du das kennst Anzahl der Zeilen kein Problem, aber es ist besser, eine Liste zu verwenden. Verwenden Sie am Ende die Methoden toArray, wenn Sie benötigen. Ich denke, die OP bevorzugen diesen Ansatz – AxelH

-1

Sie können Split versuchen()

Verwenden Sie den folgenden Syntax

String[] parts = string.split(",");

Oder Sie können StringTokenizer verwenden mit Token als ,

this helps

+0

Warum runterzählen? Bitte erläutern Sie – Kedar1442

+0

Dies löst nicht das Problem der möglichen Delimer-Charakter im Wert enthalten. –

+0

Bitte erläutern Sie Ihre Art und Weise. Ich habe versucht, von meinem Niveau – Kedar1442

0

Dies ist eine einfache Lösung, die ich eine CSV-Datei, um zu lesen.

Scanner sc = null; 
    try { 
     sc = new Scanner(new File("test.csv")); 
     String s = null; 
     String[] array; 
     while(sc.hasNext()){ 
      s = sc.nextLine(); 
      array = s.split(","); 
      System.out.println(Arrays.toString(array)); 
     } 
    } catch (FileNotFoundException ex) { 
     ex.printStackTrace(); 
    } finally { 
     if(sc != null) sc.close(); 
    } 

Basicly, wird dies einen Scanner verwenden eine Zeile zu einem Zeitpunkt, zu lesen, wahrscheinlich nicht die beste, aber für 40 Zeilen, ich weiß nicht wirklich;) Dann

, ich spaltete die Linie mit das Komma, vorsichtig wenn , in den Werten verwendet wird, wird hier keine Überprüfung vorgenommen.

Dann drucke ich das Array in der Konsole.

EDIT:

try (Scanner sc = new Scanner(new File("test.csv"))){ 
     String s = null; 
     String[] array; 
     while(sc.hasNext()){ 
      s = sc.nextLine(); 
      array = s.split(","); 
      // Do what you want with the array, here I just print the result 
      System.out.println(Arrays.toString(array)); 
     } 
    } catch (FileNotFoundException ex) { 
     ex.printStackTrace(); 
    } 
+0

5 Jahre seit Java hat versucht-mit-Ressourcen und einige Leute immer noch die gewöhnlichen 'try/catch' Idiom zum Lesen von Dateien? – Tom

+0

@Tom Einfacher Grund, im Büro gibt es immer noch auf JAVA 6! :(Aber du hast Recht, ich werde dies bearbeiten, können Sie es validieren, nur für den Fall, dass ich – AxelH

+0

@Tom, könnte ich eine Stream-API dafür verwenden, aber wieder, kann dies hier nicht testen. Und 5Jahre? Die erste Version hat 2 Jahre keine? – AxelH

0

Ich würde vorschlagen, einen regulären Ausdruck wie zu verwenden:
([A-Za-z] +) \, (\ d +) \, (\ "+ \" | . +) \, (\ w + @ \ w +. \ w +)