问题出现的代码段:
try {
FileReader fr;
try {
fr = new FileReader("C:\\TxtData\\NetFlowAttackDDOS\\import.csv");
BufferedReader br = new BufferedReader(fr);
String line = "";
String arrs[] = null;
long i = 0;
while ((line = br.readLine()) != null) {
System.out.println(line);
arrs = line.split("|");
DBObject data4 = new BasicDBObject();
data4.put("_id",i+"");
data4.put("c1",arrs[0]);
data4.put("c2",arrs[1]);
data4.put("c3",arrs[2]);
data4.put("c4",arrs[3]);
data4.put("c5",arrs[4]);
data4.put("c6",arrs[5]);
data4.put("c7",arrs[6]);
data4.put("c8",arrs[7]);
data4.put("c9",arrs[8]);
data4.put("c10",arrs[9]);
data4.put("c11",arrs[10]);
data4.put("c12",arrs[11]);
data4.put("c13",arrs[12]);
data4.put("c14",arrs[13]);
data4.put("c15",arrs[14]);
dbColl.insert(data4);
i++;
}
br.close();
fr.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
此时每次循环存入arrs中的数据总是不是预期的结果,原因到底是怎么回事呢?经过查找才明白:
split 中的字符串不是字面意义,而是正则表达式,不巧的是“|”在正则表达式中具有特殊含义。
解决的办法是:将
arrs = line.split("|"); 替换成->arrs = line.split(Pattern.quote("|"));<span style="white-space:pre"> </span>
问题解决。