CSV 文件中列之间的连字符分隔

Hyphen separated in between column in a CSV File

我有一个CSV文件,内容是这样的:

Country,Player,Runs,ScoreRate,MatchDate,Weekday,Ground,Versus,URL
Afghanistan,Mohammad Shahzad,118,97.52,16-02-2010,Tue,Sharjah CA Stadium,Canada,../Matches/MatchScorecard_ODI.asp?MatchCode=3087
Afghanistan,Mohammad Shahzad,110,99.09,01-09-2009,Tue,VRA Ground,Netherlands,../Matches/MatchScorecard_ODI.asp?MatchCode=3008
Afghanistan,Mohammad Shahzad,100,138.88,16-08-2010,Mon,Cambusdoon New Ground,Scotland,../Matches/MatchScorecard_ODI.asp?MatchCode=3164
Afghanistan,Mohammad Shahzad,82,75.92,10-07-2010,Sat,Hazelaarweg,Netherlands,../Matches/MatchScorecard_ODI.asp?MatchCode=3153

我必须找到阿富汗球员在 2010 年的总得分。

我写了一段代码,但它显示异常并输出

java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at A.main(A.java:38)
35135

但是,输出应该是28个东西。

这是代码。

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class A {

    public static void main(String args[]) throws FileNotFoundException
    {
        String csv="C:\Users\Dipayan\Desktop\odi-batting.csv";
        BufferedReader br=new BufferedReader(new FileReader(csv));

        String line=" ";
        int sum=0;
        int count=0;
        int []a=new int[10000];


        try {
            br.readLine();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            while((line=br.readLine())!=null)
                    {

                String [] f= line.split(",");

                if((f[4]="2010") != null)
                {




                a[count]=Integer.parseInt(f[2]);
                sum=sum+a[count];
                count++;
                }
                    }
        } catch (NumberFormatException | IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(sum);
    }
}

这里有一些问题。首先,您忽略了拆分日期并仅检查年份。 其次,由于这些是字符串,您应该将它们与 equals 方法进行比较。因此,while 循环的内容应该大致如下所示:

String country = f[0];
String date = f[4];
String year = date.split("-")[2];    
if (country.equals("Afghanistan") && year.equals("2010")) {
    a[count] = Integer.parseInt(f[2]);
    sum += a[count];
    count++;
}

您的代码有两个问题。

您在 , 上拆分,这意味着 f[4] 将包含 - 个分隔的日期。您需要再次拆分 f[4]。您可以从日期中提取 year,如下所示:

String date = f[4];
String []dateComponents = null!=f[4] ? f[4].split("-"); : null;
String year = null!=dateComponents && dateComponents.length>=2 ? dateComponents[2] : "";

然后您可以在 if 语句中检查年份,如下所示:

if(year.equals("2010") && "Afghanistan".equals(f[0])) {
   ....
}

a[count]=Integer.parseInt(f[2]); :如果 f[2] 中的值不是可解析的数字,则此语句可以抛出 NumberFormatException。这很可能是您获得 NumberFormatException 的原因。例如,考虑您的文件中有以下行:

Afghanistan,Mohammad Shahzad,abcd,97.52,16-02-2010,Tue,Sharjah CA Stadium,Canada,../Matches/MatchScorecard_ODI.asp?MatchCode=3087

在上述情况下,f[2] 将是无法解析为数字的 abcd。为了保护自己免受此类错误的影响,您可以在将 f[2] 解析为 int 之前检查它是否是一个数字:

int currCount = f[2].matches("-?\d+(\.\d+)?") ? Integer.parseInt(f[2]) : 0;
a[count]=currCount;

根据给定的数据,这段代码对我来说没有错误地完成了,但是你的错误表明你在第三列中有一行包含空值 - 你的完整数据是否包含数据中的空行,可能在末尾?

最好在整数解析步骤周围加上检查以防止出现这种情况:

        if (f[2]!=null && !f[2].isEmpty()){
            a[count]=Integer.parseInt(f[2]);
            sum=sum+a[count];
            count++;
        }

也就是说,正如 Mureinik 所说,您的代码中还有其他错误会阻止您获得正确的答案 - 请注意单个等于是赋值,而不是比较:

        if((f[4]="2010") != null)