我正在尝试从一列csv文件读取数据。单词vermont出现35次,但代码仅输出17。如果需要,我可以通过直接消息或电子邮件发送Csv文件。

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;

public class csvtxt {

   public static void main(String a[]){
      StringBuilder sb = new StringBuilder();
      String strLine = "";
      List<String> list = new ArrayList<String>();
      try {
         BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\dbb38\\Downloads\\customers_export_1111 - customers_export_1.csv"));
         while (strLine != null)
         {
            strLine = br.readLine();
            sb.append(strLine);
            sb.append(System.lineSeparator());
            strLine = br.readLine();
            if (strLine==null)
               break;
            list.add(strLine);
         }

         String wordToSearchFor3 = "Vermont";
         int Vermont = 0;
         for(String Vermont1 : list)
         {
            if(Vermont1.equals(wordToSearchFor3))
            {
               Vermont++;
            }
         }
         System.out.println("Vermont = " + "["+ Vermont +"]");
         //
         System.out.println(Arrays.toString(list.toArray()));
         br.close();
      } catch (FileNotFoundException e) {
         System.err.println("File not found");
      } catch (IOException e) {
         System.err.println("Unable to read the file.");
      }
   }
}


这是我得到的输出。

Vermont = [17]
[Vermont, Vermont, Vermont, Vermont, Vermont, Vermont, Vermont, Vermont, Vermont, Vermont, Vermont, Vermont, Vermont, Vermont, Vermont, Vermont, Vermont]

最佳答案

您只获得一半的匹配项,因为在每次迭代中两次调用br.readLine()方法,因此您将一个返回值用于null检查,而将另一个返回值用于sb.append()

为了在两个地方使用相同的返回值,可以将循环重新编写如下:

    while (strLine != null)
    {
        strLine = br.readLine();
        if (strLine==null)
            break;
        sb.append(strLine);
        sb.append(System.lineSeparator());
        list.add(strLine);
    }


通过使用这种难看的语法,可以使以上内容更加简洁:

    while ((strLine = br.readLine()) != null)
    {
        sb.append(strLine);
        sb.append(System.lineSeparator());
        list.add(strLine);
    }

10-02 04:07