Модель, чтобы избежать исключения за пределами в Java
Я читаю данные из файла, по одной строке за раз. Количество элементов в строке может варьироваться. Я использую Java 8.
public boolean display (Integer code, String line) {
String[] strArray = line.split(Constant.sep);
String name = strArray[0];
String address = strArray[1];
String country = strArray[2];
//Do Something Scenario (if only name is Not Null, OR if name & address are not null or ....
}
В приведенном выше случае не все поля являются обязательными для последующего выполнения.
Тем не менее, strArray выходит за границы в вышеприведенном случае, скажем, когда, например, присутствует только поле "name". Я понимаю, почему это происходит. Есть ли решение, чтобы обойти это?
Я бы предпочел упростить код и не создавать отдельный код для каждой ситуации или создавать сложную логику If / else для каждой комбинации. Значение "code" является помощником, который сообщает методу, какие поля присутствуют в "Строковой строке".
2 ответа
Используйте операторы if.
String name = “default”;
String address = “default”;
String country = “default”;
int length = strArray.length;
if(length > 1)
name = strArray[0];
if(length > 2)
address = strArray[1];
if(length > 3)
country = strArray[2];
Это работает, потому что код "проваливается" на каждый оператор if. Если длина равна 2, то третий оператор if не выполняется, а первые два. Это позволяет вам избежать повторения и использования длинной структуры оператора if.
Пока вы используете java8, думаю, это будет полезно, это простая попытка с Optional
:
public boolean display(Integer code, String line) {
String[] strArray = line.split(Constant.sep);
String[] strArrayTemp = new String[3];
System.arraycopy(strArray, 0, strArrayTemp, 0, strArray.length);
String name = "";// or anything that represents your default value
String address = "";
String country = "";
if (Optional.ofNullable(strArrayTemp[0]).isPresent())
name = strArrayTemp[0];
if (Optional.ofNullable(strArrayTemp[1]).isPresent())
address = strArrayTemp[1];
if (Optional.ofNullable(strArrayTemp[2]).isPresent())
country = strArrayTemp[2];
//complete your logic ...
return true; // I guess
}