我有一個Java方法,它接收一個CSV字符串的值和一個整數索引,以引用要解析的CSV字符串中的哪一列。該方法返回與CSV字符串中的整數索引關聯的值。如何使用jackson CsvMapper或其他csv解析器解析CSV字符串中的列?
例如,如果我有一個CSV串報頭和第二行與值定義爲:
String csvString = "Entry #,Date Created,Date Updated, IP Address
165,8/22/13 14:46,,11.222.33.444";
和爲1的方法接收的整數索引,我期望該方法返回字符串「165」
如果通過該方法獲得的整數指數爲2,我期望該方法返回的字符串「13年8月22日14:46」
等,...
我不想只用逗號分割CSV字符串,因爲這可能會變得很難看,我確信有一個CSV解析器已經做了一些這樣的解析。從我的Google搜索中,聽起來像OpenCSV或Jackson CsvMapper可以做到這一點。
我一直在玩的com.fasterxml.jackson.dataformat.csv.CsvMapper libary分析出這個CSV字符串的合適的欄目,這裏是我到目前爲止有:
int csvFieldIndex (this is the integer index passed into my method)
String csvString = "Entry #,Date Created,Date Updated, IP Address
165,8/22/13 14:46,,11.222.33.444";
CsvSchema csvSchema = CsvSchema.emptySchema().withHeader();
ObjectReader mapper = new CsvMapper().reader(Map.class).with(csvSchema);
MappingIterator<Map<String, Object>> iter = null;
iter = mapper.readValues(csvString);
while (iter.hasNext()) {
Map<String, Object> row = iter.next();
System.out.Println("row= " + row.toString());
}
但這迭代器給我所有的csv值,這不是我想要的;我只想要一個與我的整數索引相關的值。
這裏的輸出我得到的,當我運行該代碼片段:
row= {Entry #=165, Date Created=8/22/13 14:46, Date Updated=, IP Address=11.222.33.444}
有沒有一種方法,我可以使用傑克遜CsvMapper做到這一點?
======== UPDATE:======
基於從keshlam我能夠從一個CSV解析一列用下面的代碼反饋:
CsvSchema csvSchema = CsvSchema.emptySchema().withHeader();
ObjectReader mapper = new CsvMapper().reader(Map.class).with(csvSchema);
MappingIterator<Map<String, Object>> iter = null;
iter = mapper.readValues(csvString);
// iterate over whole csv and store in a map
Map<String, Object> row = null;
while (iter.hasNext()) {
row = iter.next();
}
// now put the set of field names (keys) from this map into an array
String[] csvKeysArray = row.keySet().toArray(new String[0]);
int j = 0;
// loop over this array of keys and compare with csvFieldIndex
for (int i = 0; i < csvKeysArray.length; i++) {
// increment j by 1 since array index starts at 0 but input index starts at 1
j = i + 1;
if (j == csvFieldIndex) {
csvValue = row.get(csvKeysArray[i]).toString();
}
}
return csvValue;
com.fasterxml.jackson.dataformat.csv.CsvMapper類實際上用於從CSV生成JSON。我認爲這不是你的要求,所以你最好使用OpenCSV – shazin
你有一個如何使用OpenCSV做到這一點的例子嗎? – erj2code
我從這個問題得到了我的查詢答案。 :D謝謝@ erj2code –