如何解决数组上的迭代器循环在最后一个字段Java之后再次从字段 0 开始
这是一个简单的逻辑,将 BufferedReader 读取的 csv 的标头(第一行)字段(黄色,请参见下面的屏幕截图)与该给定数组的字段进行比较:
static String[] HEADER_VALUE = {"Time","Table Accel X","Table Accel Y","Table Accel Z","Table Gyro X","Table Gyro Y","Table Gyro Z","Table Temp","Nozzle Accel X","Nozzle Accel Y","Nozzle Accel Z","Nozzle Gyro X","Nozzle Gyro Y","Nozzle Gyro Z","Nozzle Temp"};
这是我的代码:
private void validateFieldCount(BufferedReader br) {
String separator = ",";
String line;
Integer lineNumber = 0;
try{
while ((line = br.readLine()) != null){
lineNumber = lineNumber + 1;
String fields[] = line.split(separator);
if (lineNumber.equals(1)){
for (int itemCount = 0; itemCount < 10; itemCount++)
try{
if (fields[itemCount].equals(HEADER_VALUE[itemCount])){
System.out.println(itemCount + " | " + "ok " + " | " + fields[itemCount] + " | " + HEADER_VALUE[itemCount]);
}
else
System.out.println(itemCount + " | " + "not ok!" + " | " + fields[itemCount] + " | " + HEADER_VALUE[itemCount]);
} catch (Exception e) {
throw new RuntimeException("MetaDataFile header check error");}
}
} catch (IOException e) {
throw new RuntimeException("sendorDataFile field error");
}
}
这是输出:
0 | ok | Time | Time
1 | ok | Table Accel X | Table Accel X
2 | ok | Table Accel Y | Table Accel Y
3 | ok | Table Accel Z | Table Accel Z
4 | ok | Table Gyro X | Table Gyro X
5 | ok | Table Gyro Y | Table Gyro Y
6 | ok | Table Gyro Z | Table Gyro Z
7 | ok | Table Temp | Table Temp
8 | ok | Nozzle Accel X | Nozzle Accel X
9 | ok | Nozzle Accel Y | Nozzle Accel Y
10 | ok | Nozzle Accel Z | Nozzle Accel Z
11 | ok | Nozzle Gyro X | Nozzle Gyro X
12 | ok | Nozzle Gyro Y | Nozzle Gyro Y
13 | ok | Nozzle Gyro Z | Nozzle Gyro Z
14 | ok | Nozzle Temp | Nozzle Temp
0 | not ok! | 03816794 | Time
1 | not ok! | 26.339623206637313 | Table Accel X
2021-03-23 21:16:12.898 ERROR 5232 ---[ctor-http-nio-3] r.n.channel.ChannelOperationsHandler [id: 0x93cabbee,L:/[0:0:0:0:0:0:0:1]:8080 - R:/[0:0:0:0:0:0:0:1]:51837] Error was received while reading the incoming data. The connection will be closed.
问题是:为什么它会在第 14 个字段后再次从 0 开始计数(并将第 16 行的值放入 fields[]
--> 参见 csv 图片上的红色突出显示值) ?
然后它在输出的最后一行抛出运行时错误。
此外,当我将 HEADER_VALUE.length
替换为例如10
它将给出 12 行的输出,最后 2 行“不行!”行 + 运行时错误。
非常感谢您的想法!
解决方法
大括号不平衡? 外部 catch 之前的右括号对应于 while 语句之后的左括号,而不是外部 try 之后的左括号。
由于显而易见的原因,我无法对此进行进一步调查。我希望这是您的解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。