如何将csv文件加载到包含多个空格的java中

如何将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

想知道如何将csv文件加载到java中并打印结果。到目前为止,我无法让它打印出整个csv表。该工作表包含空格,其标题如下所示:

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(“”);这有助于解决空白问题。但有没有办法让他们更好地排列在标题下