簡體   English   中英

用Java解析-意外的引號

[英]Parsing in Java - unexpected quotes

我正在嘗試理解一段代碼。 我沒有寫它,我只是想使其工作。

這意味着要轉換.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();
    }


}

它通常可以工作,但是有一個問題:輸入文件的第一行是

開,高,低,關,成交量,調整關

跟着像

59.30,60.05,58.88,59.41,3373800,59.41

輸出文件應具有相同的第一行+ action ,然后具有相似的行+ BUYSELL ,但是當我運行此代碼時,它將以某種方式丟失

打開,高,低,關閉,音量,調整關閉,操作

行,接下來的行看起來像

“ 59.64”,“ 60.26”,“ 58.88”,“ 59.83”,“ 3069100”,“ 59.83”,“購買”

報價是從哪里來的,我該怎么做才能刪除它們?

要簡單地回答您,請使用

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();
}

這是對以下問題的答案:

報價是從哪里來的,我該怎么做才能刪除它們?

CSVWriter文檔中描述的構造函數允許指定引號字符。 請嘗試以下操作:

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

最后一個參數應禁止所有引號字符。

好的,EddyG建議了找到問題的正確方向。 opencsv jar具有Class CSVWriter ,並且具有不同的構造函數變體,其中包括public CSVWriter(Writer writer,char separator,char quotechar) 擺弄quotechar改善情況。 來源: opencsv文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM