当前位置: 首页 > 知识库问答 >
问题:

计算a列中的值。csv文件Java

焦信鸥
2023-03-14

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

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

public void printNumberOfPrivateNonPrivateCollegesInFile(字符串文件名)

public void printMostExpensivePrivateCollegeInFile(字符串文件名)

public void printMostExpensiveNonPrivateCollegeInFile(字符串文件名)

public void printNumberOfApplications(字符串文件名)

书籍费用的平均值。房间费用的平均值。个人支出的平均值。

public void PrintAverageofExpense(字符串文件名)

免责声明:我不想让任何人为我做作业。我需要学习,这样我才能在毕业进入行业时应用我的知识。我只是要求一个提示或更好的编写代码的方法。

到目前为止,我的代码:

    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");
}

}

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

我问我的教授如何避免这种情况,我在网上查过,问题似乎在于迭代器int“I”。我试图遍历数组,而“I”超出了界限。当我输入“1”时

    if(lineItems[i].equals("Yes"))

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

我的问题是,什么是穿越整个世界最有效的方式。csv文件,并访问单个列,以便我可以计算并输出它们?

任何帮助都将不胜感激。

编辑:

我已经更改了time循环:

        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循环之外。

共有3个答案

胥智
2023-03-14
    public void printNumberOfPrivateNonPrivateCollegesInFile(String inFile) throws IOException
{
    int privateCount = 0;
    int nonprivateCount = 0;

    FileReader fileRead = new FileReader(inFile);
    BufferedReader bufferRead = new BufferedReader(fileRead);
    try
    {
    while(true)
    {
        String line = bufferRead.readLine();
        String [] lineItems = line.split(",");
        //System.out.println(Arrays.toString(lineItems));
        for (String lineItem : lineItems) 
        {
            if (lineItem!= null && !lineItem.trim().isEmpty() && lineItem.equals("No"))
            {
                nonprivateCount++;
            }
            if (lineItem!= null && !lineItem.trim().isEmpty() && lineItem.equals("Yes")) 
            {
            privateCount++;
            }
        }
        //System.out.println(privateCount);

    }
    }
    catch(NullPointerException npe)
    {

    }
    System.out.println(privateCount);
    System.out.println(nonprivateCount);

}

修复了它。我现在只是抓住了一个例外,所以它没有那么烦人。谢谢大家的帮助。

郑燕七
2023-03-14
    if(lineItems != null && lineItems.length>0){
      // do your loop 
    }  



 if (lineItem!= null && !lineItem.trim().equals("") && lineItem.equals("Yes")) {
                    privateCount++;
                }

很可能会防止您的null问题

邓正真
2023-03-14

关于实际的行业级代码,假设任务没有特别关注实际的CSV解码,我建议找到并使用库来处理低层解码,例如OpenCSV、SuperCSV或Jackson的CSV模块。

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

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

 类似资料:
  • 我试图计算每列CSV的总和。我能够读取csv在js使用readfile方法。我也能够循环使用它,并将数据解析成对象数组。现在我只是想出一种方法来把所有的列元素加起来,这就是我正在努力的地方。我的csv对象是对象格式的数组,看起来像这样。 CSV输入如下所示: 我想补充18 19 20最终答案应该是这样的[57,518]。 到目前为止,我已经完成了这些工作,我只需要帮助来改进这一点,并在JS中按列添

  • 问题内容: 我尝试在Java中删除csv文件中的列。 例如,我有这个csv文件 我想要下一个操作后:(删除csvFile,2)将是: 我发现只有调用行而不是列的操作。 问题答案: 删除CSV文件中一列的唯一方法是删除整个文件(即文件的每一行)的标题和该列的信息。即使您使用第三方库,它也会在内部进行。

  • 我有一个csv文件,其中包含4个字段(列)。在4列中,我想读第二列,想读csv文件的特定列的第一个名称,并使用Java计算列记录。请帮忙。

  • 下面是我的一些代码: 谢谢你的协助。

  • 问题内容: 我编写了以下程序来计算Java中字符串的SHA-256哈希值: 好吧,那很好。在下一步中,我想以一种接受文件并计算其哈希值的方式来开发它。我的解决方案是在字符串数组中读取整个文件,然后在该字符串数组上调用方法。但是有两个问题: 我不知道如何将整个文件读入数组?目前,我认为我必须逐行阅读并在数组中添加新行! 上面的方法需要大文件存储空间! 这是我当前的程序来读取文件: 似乎没有一种方法可

  • 我正在尝试计算Pandas数据帧中一个值与另一个值一起出现的次数,并计算每行的次数。 这就是我的意思: 假设我想计算与,我希望结果是: 这里的< code>freq(频率)列表示< code>a列中的值与< code>t列中的值一起出现的次数。 请注意,考虑到我的数据帧的大小,仅计算发生的次数的解决方案将导致错误的频率。 有没有办法在Python中实现这一点?