我在java中使用CSV。我有一个问题,或者你可以说我不知道怎么回事 这样做:)
我有一个CSV文件,如下所示:
a,4,5,3,2
b,6,4,6,7
c,5,3,7,2
2d,1,4,5,9
4e,4,2,5,7
m4,7,5,3,6
.
.
.
xyz,1,6,4,8
我希望首先从CSV中获取包含以下这些标签的所有行 列,我在ArrayList
中都有以下第一列标签a
c
2d
m4
xyz
结果应为:
a,4,5,3,2
c,5,3,7,2
2d,1,4,5,9
m4,7,5,3,6
xyz,1,6,4,8
非常感谢!
P.S:我的CSV包含数千行和列。
答案 0 :(得分:0)
由于CSV是非结构化格式,并且行没有排序,解决问题的唯一方法是读取代码的每一行并决定是否保留它。
首先,您应该从文件中读取一行(使用InputStream / BufferedReader等),然后使用StringTokenizer以逗号分割,您可以查找第一部分是否应该选择它。
答案 1 :(得分:0)
这就是你所需要的。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
final private static List<String> lines = Arrays.asList(
"a,4,5,3,2",
"b,6,4,6,7",
"c,5,3,7,2",
"2d,1,4,5,9",
"4e,4,2,5,7",
"m4,7,5,3,",
"xyz,1,6,4,8");
final private static List<String> labelsInFirstColumn = Arrays.asList(
"a",
"c",
"2d",
"m4",
"xyz");
public static void main(String[] args) {
List<String[]> result = new ArrayList<String[]>();
for (String line : lines) {
String columns[] = line.split("[,]");
if (labelsInFirstColumn.contains(columns[0])) {
result.add(columns);
}
}
for (String[] selectedLine : result) {
for (String column : selectedLine) {
System.out.print(column + " | ");
}
System.out.println();
}
}
}
这是输出:
run:
a | 4 | 5 | 3 | 2 |
c | 5 | 3 | 7 | 2 |
2d | 1 | 4 | 5 | 9 |
m4 | 7 | 5 | 3 |
xyz | 1 | 6 | 4 | 8 |
BUILD SUCCESSFUL (total time: 1 second)
答案 2 :(得分:0)
读取流中的每一行,确定它是否为感兴趣的行,输出到下一步。
看起来你只需要将第一个逗号之前的前导字符作为比较值,因此可能不需要完整的解析,只需要从逗号char开始到第一个indexof选择的子字符串。
然后,您可以将所选字符串用作包含所需值集合的查找函数中的参数。如果找到它,请将其作为输出发送到之后您需要的过程。
如果它不仅仅是第一个位置,你需要对字符串进行标记化,如其他地方所述。