2017-10-16 84 views
-4

我試圖收集CSV行如何收集CSV行作爲字符串數組:如使用<a href="https://github.com/arnaudroger/SimpleFlatMapper" rel="nofollow noreferrer">simpleflatmapper</a>字符串數組使用simpleflatmapper

try (Reader in = Files.newBufferedReader("path")) { 
    return org.simpleflatmapper.csv.CsvParser 
// .mapTo(String[].class) 
    .stream(in) 
// .parallel() 
// .flatMap(Arrays::stream) 
    .map(line -> {return new ArrayList<>(Arrays.asList(line));}) 
// .map(Arrays::asList) 
    .collect(Collectors.toList()); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

正如我調試時,lineString[]但價值是整個行(一個元素)而不是許多字符串(許多單元格)。我怎樣才能獲得細胞陣列?

CSV文件並不特別。例如:
一個\ TB \噸1 \噸2
X \泰\噸3 \噸4

的問題,因爲我看到在這個代碼.map(line -> {return new ArrayList<>(Arrays.asList(line));})line包含一個字符串值,該值是整行(與選項卡,空間...),而不是許多字符串(每個字符串是每個單元格的值)。

我想要的全部結果是List<List<String>>(行列表)。每行是List<String>(單元格列表)。當前結果是行(行)列表,每行/行是整個字符串。

+0

您使用的是什麼CSV分析器?網絡搜索似乎只能找到「CSVParser」類。沒有'CsvParser'。既然你的問題是關於'CsvParser'生成的Stream,當我們不知道它是什麼時,你如何期望我們提供幫助? – Andreas

+0

我正在使用simpleflatmapper。 – aviit

+0

我寫過,我正在使用simpleflatmapper,但因爲這個原因有三個反對票。 – aviit

回答

0

,因爲該文件是CSV,你不需要使用任何外部的lib,所以乾脆你當你讀到這樣

Scanner scanner=new Scanner(new File("MyFile.csv")); 
while(scanner.hasNextLine()){ 
myArray=scanner.nextLine().split(","); 
} 
+0

我們必須在這裏使用一個庫。 – aviit

+0

不,你不使用任何外部的lib,除非當該需求量的 –

+0

是的,這是規定。 – aviit

0

我已經找到了解決方案txt文件讀取文件:

return org.simpleflatmapper.csv.CsvParser 
        .separator('\t') //<-- solution 
        .stream(in) 
        .map(Arrays::asList) 
        .collect(Collectors.toList()); 

謝謝大家!

相關問題