Using jcsv我正在尝试将 CSV 解析为指定类型。当我解析它时,它说数据参数的长度是1。这是不正确的。我尝试删除换行符,但它仍然显示 1。我是否只是错过了一些显而易见的东西?
这是我的输入字符串 csvString 变量
"Symbol","Last","Chg(%)","Vol",
INTC,23.90,1.06,28419200,
GE,26.83,0.19,22707700,
PFE,31.88,-0.03,17036200,
MRK,49.83,0.50,11565500,
T,35.41,0.37,11471300,
这是解析器
public class BuySignalParser implements CSVEntryParser<BuySignal> {
@Override
public BuySignal parseEntry(String... data) {
// console says "Length 1"
System.out.println("Length " + data.length);
if (data.length != 4) {
throw new IllegalArgumentException("data is not a valid BuySignal record");
}
String symbol = data[0];
double last = Double.parseDouble(data[1]);
double change = Double.parseDouble(data[2]);
double volume = Double.parseDouble(data[3]);
return new BuySignal(symbol, last, change, volume);
}
}
这就是我使用解析器的地方(就在示例中)
CSVReader<BuySignal> cReader = new CSVReaderBuilder<BuySignal>(new StringReader( csvString)).entryParser(new BuySignalParser()).build();
List<BuySignal> signals = cReader.readAll();
最佳答案
jcsv 允许使用不同的分隔符。默认为分号。使用 CSVStrategy.UK_DEFAULT
来使用逗号。
此外,您有四个逗号,通常表示五个值。您可能想要删除末尾的分隔符。
我不知道如何让 jcsv 忽略第一行
我通常使用 CSVHelper解析 CSV 文件,虽然 jcsv 看起来相当不错,但以下是使用 CVSHelper 的方法:
Reader reader = new InputStreamReader(new FileInputStream("persons.csv"), "UTF-8");
//bring in the first line with the headers if you want them
List<String> firstRow = CSVHelper.parseLine(reader);
List<String> dataRow = CSVHelper.parseLine(reader);
while (dataRow!=null) {
...put your code here to construct your objects from the strings
dataRow = CSVHelper.parseLine(reader);
}
关于java - 解析CSV时如何获得正确的字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20307034/