虽然使用Apache CSV库由@ Minjun.Y提到的是完全没有问题的,我尽量提供一个解决方案,是更接近你的代码,也许您更轻松地遵循:
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 code 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中的每个类名都以大写字母开头(按照惯例 - 它也会以小写字母构建,但您应该习惯这种约定) - 我在代码中“修复”了这一点。
我添加了2维阵列List<List<String>> lines = new ArrayList<>()
。这可能看起来有点混乱在第一,但它的意思是,我们创建一个变量lines
保存我们的分析结果。该List<String>
语法意味着,我们有一个generic typeList
具有类型参数String
- 换句话说:字符串列表。整个List<List<String>>
意味着我们有一个字符串列表,一个2维字符串数组列表。
随着lines.add(Arrays.asList(values))
在while
循环中,我们可以添加您解析这个二维数组中的行。 Arrays.asList(values)
变换String[]
阵列成List
,因为我们需要的是我们的List<List<...>>
类型兼容。这使您的线路具有可变长度。
最后几行我加了简单地打印二维数组中的内容,并应让您了解如何访问此数组中的值一个很好的例子。如果您需要此构造的进一步帮助,请检查foreach loop documentation。
鉴于此作为输入文件(read_ex.csv
):
value_1-1,value_1-2,value_1-3,value_1-4
value_2-1,value_2-2,value_2-3,value_2-4
value_3-1,value_3-2,value_3-3,value_3-4
value_4-1,value_4-2,value_4-3,value_4-4
value_5-1,value_5-2,value_5-3,value_5-4
该程序将打印输出如下:
Line 1 Column 1: value_1-1
Line 1 Column 2: value_1-2
Line 1 Column 3: value_1-3
Line 1 Column 4: value_1-4
Line 2 Column 1: value_2-1
Line 2 Column 2: value_2-2
Line 2 Column 3: value_2-3
Line 2 Column 4: value_2-4
Line 3 Column 1: value_3-1
Line 3 Column 2: value_3-2
Line 3 Column 3: value_3-3
Line 3 Column 4: value_3-4
Line 4 Column 1: value_4-1
Line 4 Column 2: value_4-2
Line 4 Column 3: value_4-3
Line 4 Column 4: value_4-4
Line 5 Column 1: value_5-1
Line 5 Column 2: value_5-2
Line 5 Column 3: value_5-3
Line 5 Column 4: value_5-4
希望这有助于:)
@Micheal Lihs,对于细节谢谢。你和我的问题以及其他几个人一样! – mikeL
不客气!希望你喜欢Java :-) –
我一直在寻找这样的东西:)谢谢你的回答 –