gpt4 book ai didi

java - 当我的 CSV 包含 5 列时,为什么我的变量 lat 返回数组越界?

转载 作者:行者123 更新时间:2023-12-02 01:07:58 26 4
gpt4 key购买 nike

我尝试使用 Java 处理 CVS 文件。我实现了前 3 列所需的操作,但 dataContent[3] 返回错误。我不明白为什么会导致我的 CSV file available here ,是 5 列。有什么想法吗??

while ((lsLigne = br.readLine()) != null) {
dataContent = lsLigne.split(";");

for (i = 0; i < dataContent.length; i++) {

cities = dataContent[0];
insee = dataContent[1];
lng = dataContent[2];
lat = dataContent[3]; // line causing problems
}


if (cities.isEmpty()) {
System.out.println("Attention nom de commune manquant");

} else if (!cities.matches(motifLettersOnly)) {
System.out.println("Attention nom de ville erroné : " + cities);

} else if (insee.isEmpty()){
System.out.println("Attention l'Insee est manquant");

} else if(!insee.matches(motifNumbersOnly)){
System.out.println("Attention Insee erronée : " + insee);

} else if(lng.isEmpty()){
System.out.println("Attention la longitude est manquante");

} else if(!lng.matches(motifNumbersOnly)){
System.out.println("Attention longitude erronée " + lng);
}
}


nom;insee;lng;lat;
OZAN;1284;4.91667;46.3833;
CORMORANCHE-SUR-SAONE;1123;4.83333;46.2333;
PLAGNE;1298;5.73333;46.1833;
TOSSIAT;1422;5.31667;46.1333;
POUILLAT;1309;5.43333;46.3333;
TORCIEU;;5.4;45.9167;
REPLONGES;1320;4.88333;Hello;
11111;1119;5.58333;46.0333;Champ sup
PERON;1288;5.93333;46.2;
RELEVANT;Hello;4.95;46.0833;
CHAVEYRIAT;1096;5.06667;46.1833;
;1431;5.35;45.9167;
MAILLAT;1228;;46.1333;
FARAMANS;1156;5.11667;;
BEON;1039;5.75;45.8333;
SAINT-BERNARD;1339;4.73723;lol;
ROSSILLON;1329;zaz;45.8333;

最佳答案

这个循环

for (i = 0; i < dataContent.length; i++)

完全没用,你可以摆脱它。

我查看了您的 CSV,您在 Faraman 列中没有 lat 值,这可能就是您收到越界异常的原因,因为您正在迭代每一行

while ((lsLigne = br.readLine()) != null)

您可以像这样避免越界异常,如果 csv 中不可用,则将值保留为空。

while ((lsLigne = br.readLine()) != null) {
dataContent = lsLigne.split(";");

if (dataContent.length > 0) {
cities = dataContent[0];
if (dataContent.length > 1)
insee = dataContent[1];
if (dataContent.length > 2)
lng = dataContent[2];
if (dataContent.length > 3)
lat = dataContent[3]; // line no longer causing problems

if (cities == null || cities.isEmpty()) {
System.out.println("Attention nom de commune manquant");

} else if (!cities.matches(motifLettersOnly)) {
System.out.println("Attention nom de ville erroné : " + cities);

} else if (insee == null || insee.isEmpty()){
System.out.println("Attention l'Insee est manquant");

} else if(!insee.matches(motifNumbersOnly)){
System.out.println("Attention Insee erronée : " + insee);

} else if(lng == null || lng.isEmpty()){
System.out.println("Attention la longitude est manquante");

} else if(!lng.matches(motifNumbersOnly)){
System.out.println("Attention longitude erronée " + lng);
}
}
}

肯定还有更好的方法来处理此逻辑,因此您可以从这里获取它。

如果你真的想使用 for 循环,你也可以这样做。

for (int i = 0; i < dataContent.length; i++) {
switch(i) {
case 0: cities = dataContent[i]; break;
case 1: insee = dataContent[i]; break;
case 2: lng = dataContent[i]; break;
case 3: lat = dataContent[i]; break;
}
}

关于java - 当我的 CSV 包含 5 列时,为什么我的变量 lat 返回数组越界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59771872/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com