java在CSV文件上执行操作
我是java初学者,请帮助我。 我试图根据一个名为“input.txt”的逗号分隔文件执行一些计算,但这对我来说很困难。任何帮助都将不胜感激
上面的文本文件“input.txt”包含以下内容:每个字段用逗号分隔。我试图逐行阅读上面的文件,并根据第三列进行一些计算。我想查找客户“Harris”当月的总账单,距离费率如下所示
所以我想计算一下比尔·哈里斯走过的总路程。(2x4+6x6+3x4+8x7)强> 当我尝试使用下面的行分割分隔数据时,它给出了一个错误:“变量currentLine可能尚未初始化”
StringTokenizer st = new StringTokenizer(currentLine,",");
代码如下:
import java.io.*;
import java.util.StringTokenizer;
public class CalculateBill{
public static void main(String[] args)throws IOException{
BufferedReader br = null;
String currentLine;
try{
while((currentLine = br.readLine()) != null)
{
System.out.println(currentLine);
}
}catch(IOException e ){
e.printStackTrace();
}
StringTokenizer st = new StringTokenizer(currentLine,",");
while(st.hasMoreTokens()){
System.out.println(st.nextToken());
}
}
}
# 1 楼答案
初始化声明的currentLine
String currentLine = null;
# 2 楼答案
这是因为您可能会达到以下代码:
在将任何值赋给变量
currentLine
之前例如,如果输入文件不存在,从中创建BufferedReader将失败,但是抛出的异常将被
catch(IOException e){}
块捕获;因此,执行将继续并将到达StringTokenizer的创建,而无需使用任何赋值初始化currentLine事实上,变量(
currentLine = br.readLine()
)的第一次赋值发生在创建BufferedReader之后,这可能会偏离正常的执行流除此之外,您还可以通过向
currentLine
添加默认赋值来编译代码,如:编译器告诉您代码中可能有错误的设计。事实上,如果读取文件失败,那么将currentLine标记化是没有意义的,因为您根本没有currentLine值
这应该让您认为您实际上希望在
while
循环中创建StringTokenizer