我正在尝试从一列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);
}