Java中的解析-意外引用

Java中的解析-意外引用,java,parsing,csv,Java,Parsing,Csv,我在试着理解一段代码。不是我写的,我只是想让它发挥作用 它用于转换.csv文件。 代码如下: import java.io.*; import au.com.bytecode.opencsv.*; public class StockParser { public static void main(String[] args) throws FileNotFoundException, IOException { CSVReader reader = new CSVReader(n

我在试着理解一段代码。不是我写的,我只是想让它发挥作用

它用于转换
.csv
文件。 代码如下:

import java.io.*;
import au.com.bytecode.opencsv.*;

public class StockParser 
{
public static void main(String[] args) throws FileNotFoundException, IOException 
{
    CSVReader reader = new CSVReader(new FileReader("/home/cloudera/Desktop/training.csv"));

    String [] nextLine;
    String [] previousLine;
    String [] headernew = new String [reader.readNext().length +1];
    CSVWriter writer = new CSVWriter(new FileWriter("/home/cloudera/Desktop/final.csv"), ',');
    nextLine = reader.readNext();
    for (int i = 0; i < nextLine.length;i++)
    {
        headernew[i] = nextLine[i];
    }
    headernew[headernew.length-1] = "action";
    writer.writeNext(headernew);
    previousLine = reader.readNext();
    while ((nextLine = reader.readNext()) != null) 
    {
        // nextLine[] is an array of values from the line
        System.out.println(nextLine[0] + nextLine[1] + " etc...");
        headernew = new String [nextLine.length + 1];
        for (int i = 0; i < headernew.length-1;i++)
        {
            headernew[i] = nextLine[i];
        }
        if (Double.parseDouble(previousLine[4]) < Double.parseDouble(nextLine[4]))
        {
            headernew[headernew.length-1] = "SELL";
        } 
        else 
        {
            headernew[headernew.length-1] = "BUY";
        }
        writer.writeNext(headernew);
        previousLine = nextLine;
    }
    reader.close();
    writer.close();
    }


}
import java.io.*;
导入au.com.bytecode.opencsv.*;
公共类StockParser
{
公共静态void main(字符串[]args)抛出FileNotFoundException、IOException
{
CSVReader reader=newcsvreader(newfilereader(“/home/cloudera/Desktop/training.csv”);
字符串[]下一行;
字符串[]上一行;
String[]headernew=新字符串[reader.readNext().length+1];
CSVWriter writer=新的CSVWriter(新的文件编写器(“/home/cloudera/Desktop/final.csv”),“,”;
nextLine=reader.readNext();
for(int i=0;i
它通常可以工作,但有一个问题:输入文件的第一行是

打开,高,低,关闭,音量,调节关闭

后面跟着像

59.30,60.05,58.88,59.413373800,59.41

输出文件应该有相同的第一行,+
action
,然后是类似的行,+
BUY
SELL
,但是当我运行此代码时,它不知何故丢失了

打开、高、低、关闭、音量、调节关闭、动作

行,, 接下来的几行看起来像

“59.64”、“60.26”、“58.88”、“59.83”、“3069100”、“59.83”、“买入”


这些引语是从哪里来的?我该怎么做才能摆脱它们

好的,EddyG为发现问题提出了正确的方向。
opencsv
jar有
类CSVWriter
,它有一个不同的构造函数变体,其中是
公共CSVWriter(Writer-Writer、char-separator、char-quotechar)
。摆弄
quotechar
改进的东西。
来源:

要简单回答您,请使用

CSVWriter writer = new CSVWriter(new FileWriter(
            "/home/cloudera/Desktop/final.csv"), ',',CSVWriter.NO_QUOTE_CHARACTER);
但是,在我的假设中,我试图纠正的代码几乎没有其他问题

public static void main(String[] args) throws FileNotFoundException,
        IOException {
    CSVReader reader = new CSVReader(new FileReader(
            "training.csv"));

    String[] nextLine;
    String[] previousLine;
    nextLine = reader.readNext();
    String[] headernew = new String[nextLine.length + 1];
    CSVWriter writer = new CSVWriter(new FileWriter(
            "final.csv"), ',', CSVWriter.NO_QUOTE_CHARACTER);
    for (int i = 0; i < nextLine.length; i++) {
        headernew[i] = nextLine[i];
    }
    headernew[headernew.length - 1] = "action";
    writer.writeNext(headernew);
    previousLine = reader.readNext();
    while ((nextLine = reader.readNext()) != null) {
        // nextLine[] is an array of values from the line
        System.out.println(nextLine[0] + nextLine[1] + " etc...");
        headernew = new String[nextLine.length + 1];
        for (int i = 0; i < headernew.length - 1; i++) {
            headernew[i] = nextLine[i];
        }
        if (Double.parseDouble(previousLine[4]) < Double
                .parseDouble(nextLine[4])) {
            headernew[headernew.length - 1] = "SELL";
        } else {
            headernew[headernew.length - 1] = "BUY";
        }
        writer.writeNext(headernew);
        previousLine = nextLine;
    }
    reader.close();
    writer.close();
}
publicstaticvoidmain(字符串[]args)抛出FileNotFoundException,
IOException{
CSVReader reader=新CSVReader(新文件读取器(
“training.csv”);
字符串[]下一行;
字符串[]上一行;
nextLine=reader.readNext();
String[]headernew=新字符串[nextLine.length+1];
CSVWriter writer=新CSVWriter(新文件编写器(
“final.csv”),,,,CSVWriter.NO_QUOTE_CHARACTER);
for(int i=0;i
这是对以下问题的回答:

这些引语是从哪里来的?我应该做些什么来摆脱它们 他们

中描述的构造函数允许指定引号字符。请尝试以下操作:

CSVWriter writer = new CSVWriter(new FileWriter("/home/cloudera/Desktop/final.csv"), ',', CSVWriter.NO_QUOTE_CHARACTER);

最后一个参数应禁止所有引用字符。

是否在调试器中运行它?作为一个有经验的用户,您应该意识到至少缺少一个核心部分:值是由CSVWriter编写的;如果没有来源,我们怎么知道发生了什么?(猜测:CSV编写器不会将数字识别为数字,而是识别为字符串,因此它会在数字周围加上“”;或者反过来,CSV编写器希望确保任何数字在输出中显示为字符串)。你的代码,你告诉我们。@EddyG,我在Eclipse中运行过它。一般来说,我或多或少都有经验,但这是我第一次处理Java代码的经验之一。至于
CSVWriter
,这实际上是个好主意,谢谢。