2016-10-25 26 views
-1

で店は私が読んでCSVファイルを持っている、と私は、文字列に格納していると私はすべての時に文字列を分割する必要がある「」そして私の入力は次のようになります分割文字列と配列

名前、ID、説明、EMAILIDのような マイケル234655「次のライン発行のテストの説明 ありがとう、マイク」マイク@ yahoo.com

親切に私にこれを手伝ってください。

よろしく、 ビジェイ

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

現行のアプローチの問題点 –

+0

StringTokenizerを使用してhttps://docs.oracle.com/javase/7/docs/api/java/utilに接続します。 /StringTokenizer.html –

+0

したがって、すべてのファイルを読み込み、Stringbuilderを追加します。完全な結果を '、' 30時間で分割し、同じString []値(同じ参照ではない)をリストに追加します。あなたが期待したことを確信していません – AxelH

答えて

0

説明してあなたのコードのリビジョンを参照してください。

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

彼はリストではなく配列に格納する必要があります – Karthik

+0

しかし、もし彼がリストを元のようにString []として保存するなら、ここで少し変更します;) – AxelH

+0

@Karthik、行数は問題ではありませんが、リストを使用する方が良いです。最後に、必要に応じてtoArrayメソッドを使用します。私はOPがこのアプローチを好むと思います。 – AxelH

-1

あなたが試すことができ、分割()構文以下

使用

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

それとも、これはこれは私がCSVファイルを読み込むために使用するシンプルなソリューションです

+0

なぜdownvote? 説明してください – Kedar1442

+0

これは値に含​​まれる可能性のあるデリミタ文字の問題を解決しません。 –

+0

あなたの方法で詳しく説明してください。 私は自分のレベルから試しました – Kedar1442

0

を役に立てば幸い,

としてトークンとStringTokenizerは使用することができます。

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、これは一度に一つの行を読み取るためにスキャナを使用し、おそらくない最高のが、40行のために、私は本当に気にしないだろう。)

その後、私が使用して行を分割カンマ、値に,が使用されている場合は注意してください。ここではチェックは行われません。

次に、コンソールにアレイを印刷します。私はのような正規表現を使用することをお勧め

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

Javaがtry-with-resourcesを持っていて、何人かの人々がまだファイルを読むのに普通の 'try/catch'イディオムを使用していますから5年ですか? – Tom

+0

@トム単純な理由は、オフィスではまだJava 6にある!私は – AxelH

+0

@ Tomの場合にも、ストリームAPIを使用することができますが、ここでもこれをテストすることはできません。最初のリリースでは2年無しですか? – AxelH

0

EDIT
([A-ZA-Z] +)\、(\ D +)\、(\ | "+ \。" 。+)\、(\ w + @ \ w +。\ w +)