我是Java新手,现在已经掌握了基础知识。我有一个csv文件,其中的行都是以下结构:
Int,,text,text,Int,text,text,text,,text,text,,text,text,,,text,,text,,,Int,Int
当我看到csv文件时,我感到非常困惑,因为它被单个逗号,双逗号和三个逗号分隔。有时特定的文本或int也是空的,excel无法处理以再次以正确的方式显示csv。
所以我认为我使用Java编写一个程序,使列只用一个逗号分隔。然后将结果保存在新的csv文件中。 (我还没有实现如何在另一个文件中编写它)通过一些研究我设法编写了一个文件阅读器来读取csv文件,但就是这样。我怎样才能得到我想要的结果?
到目前为止我做了什么:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
class Read {
public static void main(String[] args) {
FileReader myFile = null;
BufferedReader buff = null;
final ArrayList<String> lines = new ArrayList<String>();
try {
myFile = new FileReader("thisisthepathofthecsvsource");
buff = new BufferedReader(myFile);
String line;
while ((line = buff.readLine()) != null) {
lines.add(line);
}
} catch (IOException e) {
System.err.println("Error2 :" + e);
} finally {
try {
buff.close();
myFile.close();
} catch (IOException e) {
System.err.println("Error2 :" + e);
}
}
final String[][] valuesArray = new String[lines.size()][];
int cnt = 0;
for (final String line : lines) {
valuesArray[cnt++] = line.split(",");
}
for (String[] arr : valuesArray) {
System.out.println(Arrays.toString(arr));
}
}
}
答案 0 :(得分:1)
尝试使用开源库uniVocity-parsers,它提供了列分隔符的解决方案,如下所示:
CsvParserSettings settings = new CsvParserSettings();
settings.setSkipEmptyLines(true);
settings.getFormat().setLineSeparator("\n");
settings.getFormat().setQuote(',');
settings.getFormat().setQuoteEscape('\\'); // escape the double backslash
答案 1 :(得分:0)
你可以在你的时间里做到这一点
String [] dataArr = line.split(",") ;
for(String str : dataArr){
if(str == null || str.equlas("")) continue;
System.out.println(str) ;
}
这将帮助您获取逗号分隔符文件数据。
答案 2 :(得分:0)
您想将一个或多个逗号替换为一个,那么为什么不使用正则表达式替换呢?
String fileContent = "file,content,,test";
fileContent = fileContent.replaceAll(",+", ",");
这将用一个逗号替换一个或多个逗号,因此应删除所有重复项。