我的教授让我编写一个程序来读取. 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循环之外。
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);
}
修复了它。我现在只是抓住了一个例外,所以它没有那么烦人。谢谢大家的帮助。
if(lineItems != null && lineItems.length>0){
// do your loop
}
if (lineItem!= null && !lineItem.trim().equals("") && lineItem.equals("Yes")) {
privateCount++;
}
很可能会防止您的null问题
关于实际的行业级代码,假设任务没有特别关注实际的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中实现这一点?