发生错误时如何跳过一行
How do you skip a row when an error occurs
使用我的应用程序,您可以 select 一个 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;
我该如何解决这个问题?
您似乎在使用单个“=”登录 if 语句时出错。因此,条件始终为真。
相反
if(isCorrectCSVdata = true) {
你应该写
if(isCorrectCSVdata == true) {
或者只是
if(isCorrectCSVdata) {
我会在 try-catch 中完成所有解析,然后在 catch 中有一个 continue
。
如果您随后将 csvDataArray.add(scanData);
放在读取循环的末尾,它不会从发生错误的行中添加数据,您已经提前考虑并将 scanData 的声明放在try-catch,所以它应该可以在没有重大重构的情况下工作。
使用我的应用程序,您可以 select 一个 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;
我该如何解决这个问题?
您似乎在使用单个“=”登录 if 语句时出错。因此,条件始终为真。
相反
if(isCorrectCSVdata = true) {
你应该写
if(isCorrectCSVdata == true) {
或者只是
if(isCorrectCSVdata) {
我会在 try-catch 中完成所有解析,然后在 catch 中有一个 continue
。
如果您随后将 csvDataArray.add(scanData);
放在读取循环的末尾,它不会从发生错误的行中添加数据,您已经提前考虑并将 scanData 的声明放在try-catch,所以它应该可以在没有重大重构的情况下工作。