你能推荐一个Java库来读取,解析,验证和映射逗号分隔值(CSV)文件中的行到Java值对象(JavaBeans)吗?
任务是通过简单的CSV文件中的关键字段值查找特定字段(按行数排列)值(只是逗号分隔符,没有字段括号引号,字段内没有逗号),有标题在它的第一行.
用户uynhjl给出了一个示例(但使用不同的字符作为分隔符):
val src = Source.fromFile("/etc/passwd")
val iter = src.getLines().map(_.split(":"))
// print the uid for Guest
iter.find(_(0) == "Guest") foreach (a => println(a(2)))
// the rest of iter is not processed
src.close()
在这种情况下的问题是如何跳过解析标题行?
例如,从以下文件:
Name,Surname,E-mail John,Smith,john.smith@hotmail.com Nancy,Smith,nancy.smith@gmail.com Jane,Doe,jane.doe@aol.com John,Doe,john.doe@yahoo.com
我如何获得John Doe的电子邮件地址?
我现在使用以下代码,但现在只能指定一个关键字段:
val src = Source.fromFile(file)
val iter = src.getLines().drop(1).map(_.split(","))
var quote = ""
iter.find( _(1) == "Doe" ) foreach (a => println(a(2)))
src.close()
我试过写"iter.find(_(0)=="John"&& _(1)=="Doe")",但这会引发一个错误,说只有一个参数是预期的(将条件包含在额外的中)一对括号没有帮助).
我试图使用以下方法解析逗号分隔的字符串:
val array = input.split(",")
Run Code Online (Sandbox Code Playgroud)
然后我注意到一些输入行在引号内有",":
data0, "data1", data2, data3, "data4-1, data4-2, data4-3", data5
Run Code Online (Sandbox Code Playgroud)
*请注意,数据不是很干净,因此有些字段在引号内,而有些字段则没有
我如何将这条线分成:
array(0) = data0
array(1) = data1
array(2) = data2
array(3) = data3
array(4) = data4-1, data4-2, data4-3
array(5) = data5
Run Code Online (Sandbox Code Playgroud)