如何将csv文件加载到包含多个空格的java中
想知道如何将csv文件加载到java中并打印结果。到目前为止,我无法让它打印出整个csv表。该工作表包含空格,其标题如下所示:如何将csv文件加载到包含多个空格的java中,java,csv,text-files,Java,Csv,Text Files,想知道如何将csv文件加载到java中并打印结果。到目前为止,我无法让它打印出整个csv表。该工作表包含空格,其标题如下所示: Sales num, Account num, Date, Delivery, Codes Sales 1, 2345 , May17, Oct318, 3345
Sales num, Account num, Date, Delivery, Codes
Sales 1, 2345 , May17, Oct318, 3345
4435
2234
Sales 2, 3345, May 18, Oct318, 4456
每个销售有多个代码,但所有其他信息(帐号、数据、交货)只有一个代码。在编码之后,第二次销售被输入,因此销售1和销售2之间有很多空白
我找到了这个代码,但它只打印前两个单词
public static void main(String[] args) throws IOException{
try {
ArrayList < String > ar = new ArrayList < String > ();
File csvFile = new File("C:\\Users\\AZ0000\\Documents\\Book1.csv\\");
BufferedReader br = new BufferedReader(new FileReader(csvFile));
String line = "";
StringTokenizer st = null;
int lineNumber = 0;
int tokenNumber = 0;
while ((line = br.readLine()) != null) {
String[] arr = line.split(",");
for (int i = 0; i < arr.length; i++) {
//System.out.println(arr[0]+" " + arr[1] + arr); // h
}
lineNumber++;
//use comma as token separator
}
} catch (IOException ex) {
ex.printStackTrace();
}
publicstaticvoidmain(字符串[]args)引发IOException{
试一试{
ArrayListar=新的ArrayList();
文件csvFile=新文件(“C:\\Users\\AZ0000\\Documents\\Book1.csv\\”;
BufferedReader br=新的BufferedReader(新文件读取器(csvFile));
字符串行=”;
StringTokenizer st=null;
int lineNumber=0;
整数=0;
而((line=br.readLine())!=null){
字符串[]arr=line.split(“,”);
对于(int i=0;i
我最终需要从csv中取出数据,并将其导入文本文件中的某些行。不太清楚为什么空格会成为问题,但请看一看 它允许您将对象序列化为CSV
@CsvDataType()
public class Person {
@CsvField(pos = 1)
String name;
@CsvField(pos = 2, format = "dd.MM.yyyy")
Date birthDate;
}
不太清楚为什么这些空间会成为一个问题,但请看一看 它允许您将对象序列化为CSV
@CsvDataType()
public class Person {
@CsvField(pos = 1)
String name;
@CsvField(pos = 2, format = "dd.MM.yyyy")
Date birthDate;
}
您应该使用适当的解析器,因为它更可靠 默认情况下,删除任何不需要的空白,比使用
line.split(“,”;
)快得多,并且将处理字段中的引号、行尾和分隔符等内容
请尝试以下代码:
CsvParserSettings settings = new CsvParserSettings();
settings.detectFormatAutomatically();
CsvParser parser = new CsvParser(settings);
List<String[]> allRows = parser.parseAll(new File("C:\\Users\\AZ0000\\Documents\\Book1.csv"));
CsvParserSettings设置=新的CsvParserSettings();
settings.detectFormatAutomatically();
CsvParser parser=新的CsvParser(设置);
List allRows=parser.parseAll(新文件(“C:\\Users\\AZ0000\\Documents\\Book1.csv”);
希望能有帮助
免责声明:我是这个库的作者。它是开源和免费的(Apache 2.0许可证)您应该使用合适的解析器,因为它更可靠 默认情况下,删除任何不需要的空白,比使用
line.split(“,”;
)快得多,并且将处理字段中的引号、行尾和分隔符等内容
请尝试以下代码:
CsvParserSettings settings = new CsvParserSettings();
settings.detectFormatAutomatically();
CsvParser parser = new CsvParser(settings);
List<String[]> allRows = parser.parseAll(new File("C:\\Users\\AZ0000\\Documents\\Book1.csv"));
CsvParserSettings设置=新的CsvParserSettings();
settings.detectFormatAutomatically();
CsvParser parser=新的CsvParser(设置);
List allRows=parser.parseAll(新文件(“C:\\Users\\AZ0000\\Documents\\Book1.csv”);
希望能有帮助
免责声明:我是这个库的作者。它是开源和免费的(Apache 2.0许可证)如果格式看起来像你的pase,那么它就不是csv。。。 正确的格式应该是
Sales num, Account num, Date, Delivery, Codes
Sales 1, 2345 , May17, Oct318, 3345
Sales 1, 2345 , May17, Oct318, 4435
Sales 1, 2345 , May17, Oct318, 2234
Sales 2, 3345, May 18, Oct318, 4456
或者使用另一个分隔符在一列中拆分多个值,例如
Sales num, Account num, Date, Delivery, Codes
Sales 1, 2345 , May17, Oct318, 3345;4435;2234
Sales 2, 3345, May 18, Oct318, 4456
在我看来,最好的方法是像
Sales num,Account num,Date,Delivery,Codes
Sales 1,2345,May 17,Oct318,3345;4435;2234
Sales 2,3345,May 18,Oct318,4456
然后简单地读取行,按逗号拆分,,,最后一列按
拆分;
如果该格式看起来像您的密码,那么它就不是csv。。。
正确的格式应该是
Sales num, Account num, Date, Delivery, Codes
Sales 1, 2345 , May17, Oct318, 3345
Sales 1, 2345 , May17, Oct318, 4435
Sales 1, 2345 , May17, Oct318, 2234
Sales 2, 3345, May 18, Oct318, 4456
或者使用另一个分隔符在一列中拆分多个值,例如
Sales num, Account num, Date, Delivery, Codes
Sales 1, 2345 , May17, Oct318, 3345;4435;2234
Sales 2, 3345, May 18, Oct318, 4456
在我看来,最好的方法是像
Sales num,Account num,Date,Delivery,Codes
Sales 1,2345,May 17,Oct318,3345;4435;2234
Sales 2,3345,May 18,Oct318,4456
然后简单地读一行,用逗号分隔,,最后一列用逗号分隔;它只打印前两个单词,因为您只打印前两个单词:
arr[0]+“”+arr[1]
。空格不是问题。那么我如何打印整个System.out.print(arr[I]+“”)
内部,直接在for循环后面有一个System.out.println()
。代码后面有很多空白。有没有办法利用所有空白并将其对齐,使其位于正确的标题下?我使用了line.split(“”);这有助于解决空白问题。但是有没有办法将它们更好地排列在标题下呢?它只打印前两个单词,因为您只打印前两个单词:arr[0]+“”+arr[1]
。空白不是问题。那么我如何打印整个System.out.print(arr[I]+“”)
内部,直接在for循环后面有一个System.out.println()
。代码后面有很多空白。有没有办法利用所有空白并将其对齐,使其位于正确的标题下?我使用了line.split(“”);这有助于解决空白问题。但有没有办法让他们更好地排列在标题下