我想处理CSV文件。 但处理它有一些问题:
我需要分开线条; 通常我会使用.split方法btu,在这种情况下有例外:
一行可以有空的"单元格"所以看起来像x;y;z;;a;;;b
我仍然需要在数组中获取空的。
例如
array[0] = "x";
array[1] = "y";
array[2] = "z";
array[3] = "";
等等。 另一个例外是: 有一个单元格包含html代码(其中包含&#34 ;;")。 因此,如果;字符串不应该被拆分;介于""之间。 有办法解决这个问题吗?
答案 0 :(得分:1)
您可以尝试使用api OpenCSV。这是做同样的小例子,
public class OpenCSVExample {
public static void main(String[] args)
{
CSVReader reader = null;
try
{
//Get the CSVReader instance with specifying the delimiter to be used
reader = new CSVReader(new FileReader("SampleCSVFile.csv"),';');
String [] nextLine;
//Read one line at a time
while ((nextLine = reader.readNext()) != null)
{
for(String token : nextLine)
{
//Print all tokens
System.out.println(token);
}
}
}
catch (Exception e) {
e.printStackTrace();
}
finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
以上示例摘自此参考ParseCSVFiles,请查看详细信息。
答案 1 :(得分:0)
解析此表单的数据是一个常见问题,已由CSV解析器解决。您可以使用Apache Commons CSV并将分隔符更改为numberA + (uint16_t)1
,而不是默认;
。
答案 2 :(得分:0)
你可以通过reg exp获得。
<column name="Name" />
SampleCsv.csv
X; Y; Z ;;一个;;;&#34 ;;&#34 ;; B'/ P>
1; 2; 3; 4 ;;;&#34 ;;&#34 ;; 5
O / P
public void regExpSeparateWithSemicolon() {
Scanner scanner = null;
String[] result = null;
String testString = null;
String regularExpression = "(?!=\",\");";
int counter = 0;
try {
scanner = new Scanner(
new File("/home/domain/immo/Documents/SampleCsv.csv"));//Path to csv file
while(scanner.hasNext()) {
//String testString = "x;y;z;;a;\";\";b";
testString = scanner.next();
testString = testString.replaceAll("\";\"","\",\"");
result = testString.split(regularExpression);
for(int index = 0; index < result.length; index++) {
System.out.println("result["+counter+++"] = "+
result[index].replace(",", ";"));
}
}
} catch (FileNotFoundException fnf) {
System.out.println("Exception occured :"+fnf);
} catch (Exception e) {
System.out.println("Exception occured :"+e);
} finally {
if(null != scanner) {
scanner.close();
}
}
}
我无法弄清楚如何在没有replaceAll的情况下使其工作。
我希望有人能找到它。