2017-05-23 57 views
-1

我知道有很多關於將CSV文件轉換爲字符串或整數的問題,但它們並不真正滿足我的需求。JAVA將字符串CSV文件轉換爲double []數組

我有一個CSV文件的問題:這是一個文件的示例。

4.98 24 
9.14 21.6 
4.03 34.7 
2.94 33.4 
5.33 36.2 
5.21 28.7 
12.43 22.9 
19.15 27.1 
29.93 16.5 
17.1 18.9 
20.45 15 
13.27 18.9 
15.71 21.7 
8.26 20.4 
10.26 18.2 
8.47 19.9 
6.58 23.1 
14.67 17.5 
11.69 20.2 
11.28 18.2 

目的是將其轉換在類似的東西:

double[] column1= {4.98, 9.14, 4.03, 2.94, 5.33, 5.21, 12.43, 19.15}; //but with all the values, here it's just a sample 
double [] column2 = {24, 21.6, 34.7, 33.4, 36.2, 28.7, 22.9, 27.1}; 

我不想寫的所有數據,我需要做一個循環,但我不知道我是怎麼可以做到。

我設法讀取csv文件並拆分數據但不將結果轉換爲double []數組。這裏是我如何閱讀文件:

String fileName = "dataset.csv"; 
        File file = new File(fileName); 
        String[] values; 
        try{ 
         Scanner inputStream = new Scanner(file); 
         while (inputStream.hasNext()){ 
          String data = inputStream.next(); 
          values = data.split(","); 
         } 
         inputStream.close(); 

        } 
        catch (FileNotFoundException e){ 
         e.printStackTrace(); 
        } 

如果你能幫助我,那會很棒!

+1

創建兩個數組列表在讀取所有條目之後,使用'column1values = column1.toArray()將列表轉換爲'column1'和'values [1]'到column2',將列表轉換爲數組。新的Double [] {})' – SomeDude

+0

** values = data.split(「,」); **請小心,因爲即使您的csv(因爲您這樣說)文件顯示沒有''這樣的字符, '(逗號)整個文件 – ShayHaned

+0

這是一個CSV文件,我們不能看到逗號,因爲我用Excel打開它,但有逗號 – anna756825

回答

0

下面是Java 7的一個完整的工作示例:

import java.io.File; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 
import java.util.Scanner; 

public class Example 
{ 
    public static void main(String args[]) 
    { 
     Scanner inputStream = null; 
     try 
     { 
      String fileName = "dataset.csv"; 
      File file = new File(fileName); 

      // we don't know the amount of data ahead of time so we use lists 
      List<Double> col1 = new ArrayList<>(); 
      List<Double> col2 = new ArrayList<>(); 

      inputStream = new Scanner(file); 
      while (inputStream.hasNext()) 
      { 
       String data = inputStream.next(); 
       String [] arr = data.split(","); 

       col1.add(Double.parseDouble(arr[0])); 
       col2.add(Double.parseDouble(arr[1])); 
      } 

      // Covert the lists to double arrays 
      double[] column1 = new double[col1.size()]; 
      double[] column2 = new double[col2.size()]; 

      for (int i = 0; i < col1.size(); i++) 
      { 
       column1[i] = col1.get(i); 
      } 

      for (int i = 0; i < col2.size(); i++) 
      { 
       column2[i] = col2.get(i); 
      } 

      // print out just for verification 
      System.out.println(Arrays.toString(column1)); 
      System.out.println(Arrays.toString(column2)); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      if (inputStream != null) 
      { 
       inputStream.close(); 
      } 
     } 
    } 
} 
0

您可以將文件中的行分流並將它們拆分爲String[],就像您一樣。然後,您可以流每個這樣的陣列,並且每個項目轉換爲double,然後收集他們回到陣列:

double[][] data = 
    Files.lines(Paths.get(fileName)) 
     .map(s -> s.split(",")) 
     .map(s -> Arrays.stream(s).mapToDouble(Double::parseDouble).toArray()) 
     .toArray(double[][]::new); 
+1

對於數組變量的名稱,'s'似乎是個不錯的選擇。 –

+0

這似乎是一個好主意!你能告訴我我需要做哪些進口嗎?我試過了: import java.nio.file.Files; import java.nio.file.Paths; import java.util.stream.Stream; 但它不起作用 – anna756825

+0

@ anna756825你能說說「不工作」嗎?究竟是什麼問題? – Mureinik

相關問題