如何解决java.lang.ArrayIndexOutOfBoundsException错误

如何解决java.lang.ArrayIndexOutOfBoundsException错误,java,arrays,Java,Arrays,我试图从txt文件中读取用户id及其链接类型。数据以以下格式给出 SRC:aa TGT:bb VOT:1 SRC:cc TGT:bb VOT:-1 其中,用户id的“SRC”和“TGT”指示符。在数据中,一些用户id为空,即用户不同意透露其身份,如下所示: SRC: TGT:cc VOT:-1 SRC:ff TGT:bb VOT:1 在这种情况下,我想给他们一个特殊的id,“匿名”。因此,我编写了以下代码: //Reading source dataline = s.nextLine(

我试图从txt文件中读取用户id及其链接类型。数据以以下格式给出

SRC:aa
TGT:bb
VOT:1

SRC:cc
TGT:bb
VOT:-1
其中,用户id的“SRC”和“TGT”指示符。在数据中,一些用户id为空,即用户不同意透露其身份,如下所示:

SRC:
TGT:cc
VOT:-1

SRC:ff
TGT:bb
VOT:1
在这种情况下,我想给他们一个特殊的id,“匿名”。因此,我编写了以下代码:

//Reading source
 dataline = s.nextLine();
String[] line1parts = new String[2];
.
.
 //split the line at ":"
 line1parts = dataline.split(":");
 //if the line has source
 if (line1parts[0].trim().equals("SRC")){
    //if the soruce name is empty
    if (line1parts[1].isEmpty()) {
        src = "anonymous";
        System.out.print("src: " + src);
    }
    //if the source already integer id
    else {
        src = line1parts[1].trim();
        System.out.print("src: " + src);
    }
}

程序显示
java.lang.ArrayIndexOutOfBoundsException
错误。我也尝试过
if(line1parts[1].equals(“”)
if(line1parts[1].equals(null)
。可能是在
SRC:(空时)
字符串数组没有创建任何对象(如果我错了,很抱歉。我对java非常陌生)。如果一行仅包含
SRC:
line1parts数组将只有一个项,因此
line1parts[1]
引发ArrayIndexOutOfBoundsException


if(line1parts[1].isEmpty())
替换为
if(line1parts.length<2)
如果一行只包含
SRC:
那么line1parts数组将只有一个项,因此
line1parts[1]
引发ArrayIndexOutOfBoundsException


if(line1parts[1].isEmpty())
替换为
if(line1parts.length<2)

StephaneM让我记住,拆分方法在拆分过程中会修剪空单元格。这会在最后删除所有空单元格。这意味着如果您的情况下没有SRC值,则为空单元格

要防止这种情况,您可以拨打

split(String,int)

此整数指定所需数组的最小长度

line1parts = dataline.split(":", 2);
您肯定会收到长度为2或更多的数组。因此,这仍然可以删除一些单元格,但有长度限制


一个好的想法是,如果发送-1,拆分将返回每个单元格。不进行任何修剪。

StephaneM让我记住,拆分方法会在拆分过程中修剪空单元格。这会在最后删除所有空单元格。这意味着在您的情况下,如果没有SRC值,则为空单元格

要防止这种情况,您可以拨打

split(String,int)

此整数指定所需数组的最小长度

line1parts = dataline.split(":", 2);
您肯定会收到长度为2或更多的数组。因此,这仍然可以删除一些单元格,但有长度限制


一个好的想法是,如果发送-1,分割将返回每个单元格。不进行修剪。

您正在尝试获取不存在的索引

split()帮助从您提供的正则表达式中分割值

你把绳子分开了 1.“TGT:cc”在本例中是split方法从“:”分割字符串值,它返回一个大小为2的数组,即[TGT,cc](它有0和1个索引)

2.拆分字符串“SRC:”时,在本例中,拆分方法创建一个大小为1的数组,即[SRC](它只有0个索引),因为在此字符串中“:”之后没有任何内容,因此它不会为null值创建额外的索引

调用“line1parts[1].isEmpty()”时,它会抛出ArrayIndexOutOfBoundsException,因为它没有索引1

在这里,在调用“line1parts[1].isEmpty()”之前,必须检查“line1parts.length”

或-----------------

你必须这样做:


line1parts=dataline.split(“:”,2);

您试图获取不存在的索引

split()帮助从您提供的正则表达式中分割值

你把绳子分开了 1.“TGT:cc”在本例中是split方法从“:”分割字符串值,它返回一个大小为2的数组,即[TGT,cc](它有0和1个索引)

2.拆分字符串“SRC:”时,在本例中,拆分方法创建一个大小为1的数组,即[SRC](它只有0个索引),因为在此字符串中“:”之后没有任何内容,因此它不会为null值创建额外的索引

调用“line1parts[1].isEmpty()”时,它会抛出ArrayIndexOutOfBoundsException,因为它没有索引1

在这里,在调用“line1parts[1].isEmpty()”之前,必须检查“line1parts.length”

或-----------------

你必须这样做:


line1parts=dataline.split(“:”,2);

您可以标记发生此错误的行吗?您可以发布您的帖子。是否已检查index
[0]
中是否存在数据?唯一原因是
line1parts
只有1个单元格,您可以通过在字符串后指定此值来强制split方法返回2个单元格(第二个参数,整数)在您的文本文件示例中,有可能导致异常的空行。@DrewKennedy,是的,
[0]
存在。我还可以标记该行。当用户id为空时会发生错误。@arc676您可以标记发生此错误的行吗?您可以发布文章。是否检查了索引
[0]
数据是否存在?唯一的原因可能是
line1部分只有1个单元格,您可以通过在文本文件示例中的字符串(第二个参数,整数)后指定此值,强制拆分方法返回2个单元格,可能会导致异常的空行。@DrewKennedy,是,
[0]
exist。我还可以标记行。当用户id为空时会发生错误。@ARC676我忘记了拆分时的愚蠢逻辑…谢谢。我忘记了拆分时的愚蠢逻辑…谢谢。