BufferedReader Java,替换CSV文件中的所有出现

时间:2018-03-20 12:42:41

标签: java csv replace bufferedreader

我试过寻找其他解决方案,但似乎无法弄明白。 我有一个csv文件,我需要将每个具有NaN值的行替换为整数值。不应该太难,但似乎无法让它工作。

我有以下

public class main {

    public static void main(String[] args) throws IOException {

        FileReader fr = new FileReader("data/submission.csv"); 
        BufferedReader br = new BufferedReader(fr); 
        FileWriter fw = new FileWriter("data/test2.csv");
        String line;

        while((line = br.readLine()) != null)
        { 
            line = line.replaceAll("NaN","2.5");
            fw.write(line, 0, line.length());

        } 
        fr.close();
        fw.close();

    }
}

然而,这似乎完全取代了每一列并将其放入一行。我可以选择删除行上的所有空格。也就是说,

应该成为

1,2.5097082975695546

2,1.8214176758412945

3,NaN

4,2.756971983384317

5,1.6845822125042142

尝试使用line = line.replaceAll(“”,“”)执行此操作。 但是,再一次,弄乱了真正糟糕的格式

1,2.5097082975695546

2,1.8214176758412945

3,2.5

4,2.756971983384317

5,1.6845822125042142

3 个答案:

答案 0 :(得分:0)

如果您不想在单行上输出,只需添加行终止:

    while((line = br.readLine()) != null)
    { 
        line = line.replaceAll("NaN","2.5") + "\\r\\n";
        fw.write(line, 0, line.length());

    } 

答案 1 :(得分:0)

您的问题是fw.write(line, 0, line.length());没有换行符\n\r

也许在while循环中编辑以下代码行来解决问题:

fw.write((line + "\\n"), 0, (line + "\\n").length());

答案 2 :(得分:0)

让我们使用Files api。

private bool _expandnodes;
public bool ExpandNodes
{
    get
    {
        return _expandnodes;
    }
    set
    {
        _expandnodes = value;
        OnPropertyChanged("ExpandNodes");
    }
}

public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string PropName)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(PropName));
    }
}

这将使用特定于平台的换行符。所以你不必。

如果您还想删除空格,可以将替换调用链接起来。

List<String> inputLines = Files.readAllLines(Paths.get("data/submission.csv"), StandardCharsets.UTF_8);

List<String> fixedLines = new ArrayList<>(inputLines.size());

for(String line: inputLines){
    fixedLines.add(line.replace("NaN", "2.5"));
}

Files.write(
             Paths.get("data/test2.csv"), 
             fixedLines,
             StandardCharset.UTF_8,
             StandardOpenOption.CREATE
            );