我正在尝试使用以下格式转换.csv文件(使用任意数量的列):
a,b,c
d,e,f
g,h,i
进入int [] []就像这样:
int[][] a = {{a,b,c},{d,e,f},{g,h,i}}
在Java中。我该怎么做呢?
答案 0 :(得分:0)
我不会给出完整的答案(有些部分你应该能够自己查找),但是:
1)使用split()
将输入行拆分为字段。结果是String[]
。
2)将每个String
转换为int
的最简单方法是使用流。如果fields
是String[]
,那么您可以使用:
int[] ints = Arrays.stream(fields).mapToInt(Integer::parseInt).toArray();
这假设没有任何解析错误。如果要优雅地处理无效输入,可能需要使用循环而不是流。
要解决这个问题:Arrays.stream
会创建一个"流"它为您提供了数组中的所有Strings
。 mapToInt
将流转换为IntStream
(int
的流;请注意,当元素具有int
等基本类型时,会有特殊的流类型。它通过应用方法Integer.parseInt
来执行此操作,该方法采用String
参数并返回int
。 toArray
上的IntStream
会从流中构建int[]
。
3)使用ArrayList<int[]>
来保存所有行的数组,因为您事先并不知道将会有多少行。如果您需要int[][]
,可以稍后将ArrayList
转换为数组。
答案 1 :(得分:0)
最简单的方法是使用互联网上可以找到的众多CSV解析器之一。例如https://commons.apache.org/proper/commons-csv/
如果您想手动执行此操作,可以逐行读取文件并使用StringTokenizer将每行拆分为令牌,然后可以将其解析为适当的Java类型。