有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

共 (2) 个答案

  1. # 1 楼答案

    初始化声明的currentLine

    String currentLine = null;

  2. # 2 楼答案

    这是因为您可能会达到以下代码:

    StringTokenizer st = new StringTokenizer(currentLine,",");
    

    在将任何值赋给变量currentLine之前

    例如,如果输入文件不存在,从中创建BufferedReader将失败,但是抛出的异常将被catch(IOException e){}块捕获;因此,执行将继续并将到达StringTokenizer的创建,而无需使用任何赋值初始化currentLine

    事实上,变量(currentLine = br.readLine())的第一次赋值发生在创建BufferedReader之后,这可能会偏离正常的执行流

    除此之外,您还可以通过向currentLine添加默认赋值来编译代码,如:

    String currentLine = null;
    

    编译器告诉您代码中可能有错误的设计。事实上,如果读取文件失败,那么将currentLine标记化是没有意义的,因为您根本没有currentLine值

    这应该让您认为您实际上希望在while循环中创建StringTokenizer