我试过寻找其他解决方案,但似乎无法弄明白。 我有一个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
答案 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
);