【问题标题】:How do you skip a row when an error occurs发生错误时如何跳过一行
【发布时间】:2021-06-01 12:43:02
【问题描述】:

使用我的应用程序,您可以选择一个 csv 文件并将该数据作为地图读取(它们是坐标)。现在我想如果有人在他们的 csv 中有错误的数据,我会跳过该数据行。

我想用 try catch 来解决这个问题,但我想不通。如果数据也正确,我只想添加行,否则我想进入下一行,看看是否正确,然后如果行有效则添加。

private static ArrayList<ScanDataObject> getCsvData(String pathToCsv) {
    ArrayList<ScanDataObject> csvDataArray = new ArrayList<>();
    ScanDataObject scanData = new ScanDataObject("0", 0, 0, 0, 0, 0, 0);
    boolean isCorrectCSVdata = true;

    if (pathToCsv.length() > 0) {
        try (Scanner scanner = new Scanner(new File(pathToCsv))) {
            while (scanner.hasNext()) {
                //              Create an array of strings with all the items in the current line
                String[] splits = scanner.nextLine().split(";");

                try {
                    String dateTime = splits[0];
                    double xAxis = Double.parseDouble(splits[1].replace(',', '.'));
                    double yAxis = Double.parseDouble(splits[2].replace(',', '.'));
                    double zAxis = Double.parseDouble(splits[3].replace(',', '.'));
                    double distance = Double.parseDouble(splits[4].replace(',', '.'));
                    double xAxisRover = Double.parseDouble(splits[5].replace(',', '.'));
                    double yAxisRover = Double.parseDouble(splits[6].replace(',', '.'));

                    //              Create a new ScanDataObject to save the newly read information and add to the ArrayList afterwards
                    scanData = new ScanDataObject(dateTime, xAxis, yAxis, zAxis, distance, xAxisRover, yAxisRover);
                } catch (Exception e) {
                    e.printStackTrace();
                    isCorrectCSVdata = false;
                }
                
                if(isCorrectCSVdata = true) {
                    csvDataArray.add(scanData);
                }
                
                isCorrectCSVdata = true;
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    return csvDataArray;

我该如何解决这个问题?

【问题讨论】:

  • 您可以在循环中使用continue; 提前结束当前迭代并开始下一个迭代。

标签: java try-catch add


【解决方案1】:

您在 if 语句中使用单个“=”登录似乎有错误。因此,条件始终为真。

相反

if(isCorrectCSVdata = true) {

你应该写

if(isCorrectCSVdata == true) {

或者只是

if(isCorrectCSVdata) {

【讨论】:

    【解决方案2】:

    我会在 try-catch 中进行所有解析,然后在 catch 中添加 continue

    如果您随后将csvDataArray.add(scanData); 放在读取循环的末尾,它将不会从发生错误的行中添加数据,您已经提前考虑并将scanData 的声明放在try-catch 之外,所以它应该可以在没有重大重构的情况下工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      • 2022-10-09
      • 1970-01-01
      相关资源
      最近更新 更多