Модель, чтобы избежать исключения за пределами в 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
}
Другие вопросы по тегам