gpt4 book ai didi

java - 计算 .csv 文件的列中的值 Java

转载 作者:太空宇宙 更新时间:2023-11-04 13:53:45 25 4
gpt4 key购买 nike

我的教授要求我编写一个程序来读取 .csv 文件(778 行(包括标题行),8 列)。我需要:1. 编写一个方法来接收文件名作为参数,然后打印文件中的行数。

公共(public)无效printNumberOfLinesInFile(字符串文件名)

  • 编写一个方法来接收文件名作为参数,然后打印私立和非私立大学的数量。
  • 公共(public)无效printNumberOfPrivateNonPrivateCollegesInFile(字符串文件名)

  • 编写一个方法来接收文件名称作为其参数,然后打印州外学费最高的私立大学名称。
  • 公共(public)无效printMostExpectivePrivateCollegeInFile(字符串文件名)

  • 编写一个方法来接收文件名作为其参数,然后打印州外学费最高的非私立大学。
  • 公共(public)无效printMostExpenseNonPrivateCollegeInFile(字符串文件名)

  • 编写一个方法来接收文件名作为其参数,然后打印申请数量以及私立和非私立大学接受的申请人数量。
  • 公共(public)无效printNumberOfApplications(字符串文件名)

  • 编写一个方法来接收文件名作为其参数,然后打印私立和非私立大学的以下信息。
  • 平均书籍费用。房间费用的平均值。个人平均开支。

    公共(public)无效printAverageOfExpenses(字符串文件名)

    免责声明:我不想让任何人帮我做作业。我需要学习,以便在毕业并进入行业时应用我的知识。我只是寻求提示或更好的编写代码的方法。

    到目前为止我的代码:

        public class Week14 
    {
    public String data;



    public void printNumberOfLinesInFile(String inFile) throws IOException
    {
    int collegeCount = 0;
    FileReader fileRead = new FileReader(inFile);
    BufferedReader bufferRead = new BufferedReader(fileRead);
    while(true)
    {
    String line = bufferRead.readLine();
    if(line == null)
    {
    break;

    }
    collegeCount++;
    //System.out.println(line);
    }
    System.out.println(collegeCount-1 + " Colleges total.");
    }
    public void printNumberOfPrivateNonPrivateCollegesInFile(String inFile) throws IOException
    {
    int privateCount = 0;
    int nonprivateCount = 0;
    int count = 0;
    FileReader fileRead = new FileReader(inFile);
    BufferedReader bufferRead = new BufferedReader(fileRead);
    while((data = bufferRead.readLine())!= null)
    {
    String line = bufferRead.readLine();
    String [] lineItems = line.split(",");
    for(int i = 0; i < line.length(); i++)
    {
    if(lineItems[i].equals("Yes"))
    {
    privateCount++;
    }
    }

    break;
    }
    System.out.println(privateCount+" private Colleges.");
    System.out.println(nonprivateCount+ " non-private Colleges.");
    }

    public void printMostExpensivePrivateCollegeInFile(String inFile) throws FileNotFoundException, IOException
    {
    int mostExpensive = 0;
    int currentExpensive = 0;
    FileReader fileRead = new FileReader(inFile);
    BufferedReader bufferRead = new BufferedReader(fileRead);
    while((data = bufferRead.readLine())!= null)
    {
    String line = bufferRead.readLine();
    if(line.equals("OutstateTuition"))
    {
    System.out.println(line);
    }
    else
    {
    System.out.println(line);
    }
    }



    }

    public void printMostExpensiveNonPrivateCollegeInFile(String fileName)
    {

    }

    public void printNumberOfApplications(String fileName)
    {

    }

    public void printAverageOfExpenses(String fileName)
    {

    }
    public static void main(String[] args) throws FileNotFoundException, IOException
    {
    File inFile = new File("College.csv");
    FileReader fileReader = new FileReader(inFile);
    BufferedReader buffReader = new BufferedReader(fileReader);
    Week14 w1 = new Week14();
    //w1.printNumberOfLinesInFile("College.csv");
    w1.printNumberOfPrivateNonPrivateCollegesInFile("College.csv");
    //^^^The above line goes into an infinite loop^^^
    //w1.printMostExpensivePrivateCollegeInFile("College.csv");
    }

    }

    问题是,我一直在尝试计算私立和非私立大学的数量。在我的方法 printNumberOfPrivateNonPrivateCollegesInFile (第 39 行)中,我遇到了异常: java.lang.ArrayIndexOutOfBoundsException: 8

    我问过我的教授如何避免这种情况,我在网上查了一下,问题似乎出在迭代器 int 'i' 上。我正在尝试遍历数组,但“i”超出范围。当我在

    中输入“1”时
        if(lineItems[i].equals("Yes"))

    对于我的 privateCount,privateCount 的输出为 67(我认为出于某种原因它正在计算单个字符)。

    我的问题是,遍历整个 .csv 文件并访问各个列以便对它们进行计数并输出的最有效方法是什么?

    任何帮助将不胜感激。

    编辑:

    我改变了 while 循环:

            while(true)
    {
    String line = bufferRead.readLine();
    String [] lineItems = line.split(",");
    if(line == null)
    {
    break;
    }

    for (String lineItem : lineItems) {
    privateCount++;
    }

    }

    现在我可以遍历整个 .csv 文件,但当我尝试计数时收到 java.lang.NullPointerException。

    编辑2:我再次重做了 while 循环,

        while(true)
    {
    String line = bufferRead.readLine();
    String [] lineItems = line.split(",");

    for (String lineItem : lineItems) {
    if (lineItem.equals("Yes")) {
    privateCount++;
    }
    }
    System.out.println(privateCount);

    }

    我现在正在计算 privateCount 的正确值,但在以下位置出现 NullPointerException:

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

    并且循环不会让我在没有“break”语句的情况下将“echo”放在 while 循环之外。

    最佳答案

    对于实际的行业级代码,并假设分配并不专门关注实际的 CSV 解码,我建议查找并使用一个库来处理低级解码,例如 OpenCSVSuperCSVCSV-module for Jackson .

    这样您的代码就可以专注于查找特定值的更有趣的部分,而不是复杂的细节,例如可能的转义和/或引用内容。

    如果重点是 CSV 边缘情况,则不应该使用这种方法;但对于真正的生产代码,鉴于存在多个用于该任务的良好库,希望很少有人编写实际的低级解码部分。

    关于java - 计算 .csv 文件的列中的值 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30040471/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com