【发布时间】:2018-09-05 23:30:50
【问题描述】:
我的文件在一列中包含多个值。我试图用这个代码使用java读取这个文件:
ArrayList<String> linesList1 = new ArrayList<>();
ArrayList<String> roadlinkid = new ArrayList<>();
ArrayList<String> road_name_orignal = new ArrayList<>();
ArrayList<String> road_name_copy = new ArrayList<>();
ArrayList<String[]> networkmember_href = new ArrayList<>();
ArrayList<String> road_fid = new ArrayList<>();
// Input of file which needs to be parsed
String csvFile1 = "RoadData.csv";
BufferedReader csvReader1;
// Data split by ',' in CSV file
String csvSplitBy = ",";
try {
String line;
csvReader1 = new BufferedReader(new FileReader(csvFile1));
while ((line = csvReader1.readLine()) !=null) {
linesList1.add(line);
}
csvReader1.close();
}
catch (IOException e) { e.printStackTrace(); }
for (int i = 0; i < linesList1.size(); i++) {
String[] data = linesList1.get(i).split(csvSplitBy);
road_fid.add( data[1]);
road_name_orignal.add( data[9]);
if (data[9].contains("{")) {
String[] xy = data[9].replaceAll("\\{|\\}", "").split(",");
int leng = xy.length;
String[] networkmember = new String [leng];
for ( int n = 0 ; n < leng ; n++) {
networkmember[n] = xy [n];
}
networkmember_href.add(networkmember);
}
}
此代码运行良好,但问题是该代码将列中的每个值作为单独的列处理。因此,它返回错误的数据。
文件: http://s000.tinyupload.com/?file_id=47090134488569683648
想法是通过比较 RoadData.csv 中的 road_fid 和 RoadLink.csv 中的 roadlink_fid,从 RoadData.csv 中找到道路名称并将其写入 RoadLink.csv。不幸的是,我可以找到一种方法来处理具有多值的列。任何建议,请。
提前致谢。
【问题讨论】:
-
如果您正在处理一些复杂的 CSV 文件,那么我建议使用 CSV parser
-
如果您真的不想使用 csv 解析器,那么您可以使用带有
"(""|[^"])*"|'(''|[^'])*'|`(``|[^`])*`|[^,]+这样的模式的正则表达式 -
谢谢。我已经扫描了您发布的链接,但这似乎不是解决此问题的直接方法。使用这个的目的是什么:"(""|[^"])*"|'(''|[^'])*'|
(``|[^])*`|[^,]+ 你能解释一下吗请再多一点。 -
我已经在回答中解释过了。