没有csv的split()方法

时间:2013-09-16 14:17:56

标签: java split

我需要将文本文件拆分为各个字段。我可以控制值的划分方式,但是因为每个值中偶尔会有逗号,所以我不能使用CSV。导入文件的最佳方法是什么? TAB会成为更好的分隔符吗?

问题出在Lippincott,Williams&威尔金斯。这就是一个领域。

示例数据

  

教育史,1748-5959,na,Wiley-Blackwell,政治经济史,1527-1919,0018-2702,杜克大学出版社,政治经济史 - 年度补编,na,失踪,历史教师, 0018-2745,0018-2745,历史教育学会,今日历史,na,0018-2753,历史今日有限公司,家庭医疗保健护士,na,0884-741X,Lippincott,Williams& Wilkins,Hospitality Law,na,0889-5414,LRP Publications,Hudson Review,na,0018-702X,Hudson Review Incorporated,Humanist - DC,na,0018-7399,American Humanist Associatioin,Idealistic Studies,na,0894-5373, F& W Media,

2 个答案:

答案 0 :(得分:2)

不是硬编码分隔符,为什么不把它作为一个可配置的参数,那么如果输入应该改变或类似的东西,你可以很容易地适应而不必重写。

如果这不是一个选项,TAB|似乎是合理的选项而不知道输入是什么

答案 1 :(得分:2)

您选择任何分隔符,它会打破您的一个数据值拥有它们的那一天。那么,为什么不采用一个CSV库来确保分隔符在需要时被转义并且毫不费力地将它们读回来。

以下是使用OpenCSV

执行此操作的方法
 String[] values = {"one", "two,three", "four , five"};
 CSVWriter writer = new CSVWriter(new FileWriter("yourfile.csv"));
 writer.writeNext(values);
 writer.close();

CSVReader reader = new CSVReader(new FileReader("yourfile.csv"));
String [] entries;
// reading just the first line
if ((entries = reader.readNext()) != null) {
    System.out.println(entries[0] + ", " + entries[1] + ", " + entries[2]);
}
reader.close();

如果需要,您实际上可以使用OpenCSV的任何自定义分隔符,例如Tab \t

 CSVWriter writer = new CSVWriter(new FileWriter("yourfile.csv"), '\t');

但是使用CSV可以使您的数据文件与许多其他工具兼容。因此,它完全取决于您对数据文件的兼容性要求(如果有的话)。