2017-03-22 34 views
0

"、"でCSV分割の列を取り出し、arraylistに配置しようとしています。例えば、私のCSVは、次のようになります。csvの個々の列を対応するarraylistsに読み込むjava

Member_ID,Member Name 
11001,Jack Brown 
11009,James White 
11014,Barbara Jones 

だから私はIDが呼ばれるのArrayListにMEMBERID欄の下にあるすべてのものを載せていきたいと思います。

11001 
Jack Brown 
11009 
James White 
11014 
Barbara Jones 

が本当に試してみたいと:

  String File = ("MEMBER.csv"); 
      Scanner read = new Scanner(SubscriptionService.class.getResourceAsStream(File)); 
      read.useDelimiter(",|\\n"); 
      ArrayList<String> IDs = new ArrayList<>(); 
      read.nextLine(); 
      while (read.hasNext()) { 
       IDs.add(read.next()); 
      } 
      System.out.println("Member_ID Username"); 
      for (int i = 0; i < IDs.size(); i++) { 
       System.out.println(IDs.get(i)); 
      } 

私はIDの中にあるものを見るために印刷

が、それはすべてのものを印刷していないだけでIDがそうのようにArrayListを:

は、ここに私の現在のコードですOpen CSVなどの他のライブラリを使用しないでください。

+0

月にこの質問をしたことを忘れたことがありますか?http://stackoverflow.com/a/42190886/411604 – antonio081014

答えて

0

上記のように、「カスタム」CSVの解析はお勧めできません。すべての本番環境では、成熟したライブラリ(OpenCSVなど)を使用する必要があります。

このように言えば、Scannerの代わりにBufferedReaderを使用して実装するほうが簡単なI/Oタスクです。 ArrayListはもちろん、CSV列のうちの1つだけが必要とされない限り、このタイプのデータを格納するのに最適なデータ構造ではありません。

それにもかかわらず、入力ファイルが後に提示形態である行から成ると仮定し、その名前を指定して、そのようなファイルを読み取る方法は、次のとおりです

public static void read(String name) throws IOException { 
    BufferedReader reader = new BufferedReader(new InputStreamReader(SubscriptionService.class.getResourceAsStream(name))); 
    ArrayList<String> IDs = new ArrayList<>(); 
    ArrayList<String> names = new ArrayList<>(); 
    String line; 
    String[] tokens; 
    while ((line = reader.readLine()) != null) { 
     tokens = line.split(","); 
     if (tokens.length != 2) { // Skip any "weird" (e.g., empty) line 
     continue; 
     } 
     IDs.add(tokens[0].trim()); 
     names.add(tokens[1].trim()); 
    } 
    System.out.println("Member_ID\tUsername"); 
    for (int i = 0; i < IDs.size(); i++) { // IDs and names have the same size 
     System.out.println(IDs.get(i) + "\t" + names.get(i)); 
    } 
    } 

方法はBufferedReaderへの使用します標準化された方法で入力ファイルを1行ずつ読み込み、データを2つのArrayListオブジェクトに格納します.1つはID用、もう1つは名前用です。 trim()メソッドは、コンマ区切り記号の前後の空白を削除するために使用されます。

ファイル全体を読み取った後、read()メソッドは、2つのフィールドをtab文字(\t)で区切って行ごとに結果を出力します。

IDの印刷のみが必要な場合は、コードを適宜編集することができます。この場合、メソッドを変更してIDsArrayListを返すこともできます。

+0

ありがとうございました。 –

+0

あなたは大歓迎です。 :-) – PNS

関連する問題