【问题标题】:Cannot invoke String.split(string) as parameter is null无法调用 String.split(string),因为参数为 null
【发布时间】:2022-10-13 18:52:28
【问题描述】:

尝试将 csv 行拆分为多个部分以从中创建对象类,我的功能如下。 ProcessLine 从 readFile 中获取该行,目前它抛出一个错误,说“无法调用 String.split(string),因为它是空的。

    public static FlightOperation[] readFile(String fileName)
    {    
        FileInputStream fileStream = null;
        InputStreamReader Read;
        BufferedReader bufRead;
        int fileLength = getFileCount(fileName);
        String line;
        FlightOperation[] laxData = new FlightOperation[fileLength];
        try
        {
            fileStream = new FileInputStream(fileName);
            Read = new InputStreamReader(fileStream);
            bufRead = new BufferedReader(Read);
            line = bufRead.readLine();
            for(int i = 0; i < fileLength; i++)
            {
                line = bufRead.readLine();
                laxData[i] = processLine(line);
            }
        }
        catch(IOException errorDetails)
        {
            if(fileStream != null)
            {
                try
                {
                    fileStream.close();
                }
                catch(IOException ex2)
                {}
            }
            System.out.println("Error in fileProcessing: " + errorDetails.getMessage());
        }
        return laxData;
    }

    public static FlightOperation processLine (String inLine) {
        String[] splitLine;
        String[] tempArray = {"0","0","0","0","0","0","0"};
        int tempFlightOpsCount = 0;
        int[] dateArray = {0,0,0};
        splitLine = inLine.split(",");
        int lineLength = splitLine.length;
        for(int i = 0; i < lineLength; i++)
        {
            if(i == 6) {
                tempFlightOpsCount = Integer.parseInt(splitLine[i]);
            }
            if(i<3) {
                dateArray[i] = Integer.parseInt(splitLine[i]);
            }
            splitLine[i] = tempArray[i];
        }
        Date inDate = new Date(dateArray[0], dateArray[1], dateArray[2]);
        FlightOperation inFlightOperation = new FlightOperation(tempArray[3], tempArray[4], tempArray[5], tempFlightOpsCount, inDate);
        
        return inFlightOperation;
    }

此函数从 CSV 文件中获取一行,并获取前三个元素组成 Date 类,最后四个元素组成 FlightOperation 类。

Day,Month,Year,FlightType,Arrival_Departure,Domestic_International,FlightOpsCount
1,1,2006,Charter,Departure,Domestic,62

这是 CSV 中的一行,因此您可以看到输入的内容。我是 Java 新手,所以不确定到底是什么导致了错误,我怀疑我的 readFile 函数有问题?因为我认为 processLine 函数应该可以正常工作。任何帮助表示赞赏。

【问题讨论】:

    标签: java


    【解决方案1】:

    当没有更多行可提供时,bufRead.readLine() 返回 null。如果 getFileCount(fileName) 返回的数字高于 CSV 中的行数,您的代码就会中断。

    您没有将其包含在粘贴中,但是,它显然已损坏。请注意,整个设置很不稳定。你现在需要读两遍。在br.readLine() 返回null 之前循环要简单得多,然后就可以停止了。无需先读取整个文件来计算有多少行,然后循环再次处理文件。只循环一次。

    【讨论】:

      猜你喜欢
      • 2021-12-20
      • 2021-04-29
      • 2022-11-12
      • 1970-01-01
      • 2018-09-18
      • 2022-06-10
      • 2023-03-05
      • 1970-01-01
      • 2022-01-05
      相关资源
      最近更新 更多