尽管使用@ Minjun.Y提到的Apache CSV库非常好,但我尝试提供一种更接近您的代码并且可能更易于您遵循的解决方案:
import java.io.File;import java.io.FileNotFoundException;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.Scanner;public class CsvParser { public static void main(String[] args) { String fileName= "read_ex.csv"; File file= new File(fileName); // this gives you a 2-dimensional array of strings List<List<String>> lines = new ArrayList<>(); Scanner inputStream; try{ inputStream = new Scanner(file); while(inputStream.hasNext()){ String line= inputStream.next(); String[] values = line.split(","); // this adds the currently parsed line to the 2-dimensional string array lines.add(Arrays.asList(values)); } inputStream.close(); }catch (FileNotFoundException e) { e.printStackTrace(); } // the following pre lets you iterate through the 2-dimensional array int lineNo = 1; for(List<String> line: lines) { int columnNo = 1; for (String value: line) { System.out.println("Line " + lineNo + " Column " + columnNo + ": " + value); columnNo++; } lineNo++; } }}让我们逐步进行:
我加了3个进口:
ArrayList
,Arrays
和List
-你会很快对他们有什么好见。它们全部取自java.util
库,该库是每个JDK都提供的标准库。Java中的每个类名称都以大写字母开头(按照惯例-也会以小写字母开头,但是您应该习惯于该惯例)-我在代码中“固定”了这个名称。
我添加了一个二维数组
List<List<String>> lines = new ArrayList<>()
。刚开始时,这可能看起来有些混乱,但这意味着我们创建了一个lines
保存解析结果的变量。该List<String>
语法手段,我们有一个泛型类型List
,有一个类型参数String
-换句话说:字符串列表。整个List<List<String>>
意思是我们有一个字符串列表列表,一个二维字符串数组。随着
lines.add(Arrays.asList(values))
在你的while
循环中,我们可以添加您解析这个二维数组中的行。根据需要Arrays.asList(values)
将String[]
数组转换List
为与我们的List<List<...>>
类型兼容的数组。这使您的线具有可变的长度。我添加的最后几行仅打印了二维数组的内容,应该为您提供有关如何访问此数组中值的一个很好的示例。如果您需要进一步的帮助,请查看foreach循环文档。
将此作为输入文件(
read_ex.csv):
value_1-1,value_1-2,value_1-3,value_1-4value_2-1,value_2-2,value_2-3,value_2-4value_3-1,value_3-2,value_3-3,value_3-4value_4-1,value_4-2,value_4-3,value_4-4value_5-1,value_5-2,value_5-3,value_5-4
该程序将打印以下输出:
Line 1 Column 1: value_1-1Line 1 Column 2: value_1-2Line 1 Column 3: value_1-3Line 1 Column 4: value_1-4Line 2 Column 1: value_2-1Line 2 Column 2: value_2-2Line 2 Column 3: value_2-3Line 2 Column 4: value_2-4Line 3 Column 1: value_3-1Line 3 Column 2: value_3-2Line 3 Column 3: value_3-3Line 3 Column 4: value_3-4Line 4 Column 1: value_4-1Line 4 Column 2: value_4-2Line 4 Column 3: value_4-3Line 4 Column 4: value_4-4Line 5 Column 1: value_5-1Line 5 Column 2: value_5-2Line 5 Column 3: value_5-3Line 5 Column 4: value_5-4
希望这可以帮助 :)



