我不明白为什么它总是忽略第一行...输入:

b,a,c
x,f,ggg


还尝试了:

v,c,c
"v","xxx","x"


我正在使用这段代码:

 public void readFile(String fileName) throws IOException {
        String text = null;
        BufferedReader br = new BufferedReader(new FileReader(fileName));
        try {
            StringBuilder sb = new StringBuilder();
            String line = br.readLine();

            while (line != null) {
                sb.append(line);
                sb.append(System.lineSeparator());
                line = br.readLine();
            }

            text = text == null ? sb.toString() : text + "\n" + sb.toString();
        } finally {
            br.close();
            if (parserSet == false) {
                setParser(text, CSVFormat.DEFAULT.withHeader());
            }
        }


setPaser方法类似于:

 public void setParser(String textToParse, CSVFormat csvFormat) throws IOException {
     try {
        parserSet = true;
        this.textToParse = textToParse;
        CSVParser parser = CSVParser.parse(this.textToParse, csvFormat);
        records = parser;
        for (CSVRecord r: records) {
            System.out.println("Record: " + r);
            System.out.println("R(" + r.getRecordNumber() + "): " + r.get(0));
        }
        }catch (IOException e){
            e.printStackTrace();
        }
    }


输出是:


  记录:CSVRecord [注释=空,映射= {b = 0,a = 1,c = 2},
  recordNumber = 1,值= [x,x,tss]]
  
  R(1):x


因此,似乎总是忽略第一行...我希望recordNumber = 1的值= [b,a,c] ...我需要那些值。

编辑:以旧的方式,我正在使用record.toMap()。entrySet(),从那里我得到第一行值,但是它们的顺序错误(例如,b,a,c返回为a,b,c),我需要原始值的顺序

最佳答案

您正在告诉解析器有一个标头:

setParser(text, CSVFormat.DEFAULT.withHeader());


因此,第一行用于列标题/名称。

关于java - CSVParser [Apache]-为什么总是忽略第一行(JAVA),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54828709/

10-12 20:53