模型以避免Java中的超出范围异常

时间:2017-12-16 20:48:44

标签: java stringindexoutofbounds

我正在读取文件中的数据,一次一行。该行中元素的数量可以变化。我使用的是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不受约束,例如,仅存在字段“名称”。我明白了,为什么会这样。有没有解决方案来解决这个问题?

我更希望简化代码,而不必为每种情况创建单独的代码,或者为每种组合构建复杂的If / else逻辑。值“code”是一个帮助器,它告诉方法“String line”中存在哪些字段。

2 个答案:

答案 0 :(得分:0)

使用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语句,但前两个是。这允许您避免重复自己并使用long if语句结构。

答案 1 :(得分:-1)

只要您使用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
}