Java ArrayList忽略导致ArrayIndexOutOfBoundsException的空值

Java ArrayList忽略导致ArrayIndexOutOfBoundsException的空值,java,Java,我试图从一行中获得一个特定的数据,使用!一分为二。 例如: S!ARC!256!547291!840.50!9038.00!840.50!9038.00!519.50!9038.00!321.00!0.00!COUNTERCLOCKWISE!ASSEMBLY_TOP!BAT-2-CR1632-T0_R!BT2K! 所以,当我使用!并将其放入数组中,该数组应包含16个数据。但我面临的问题是,当数据 S!LINE!257!37825 1!3525.00!10720.00!4525.00!10720

我试图从一行中获得一个特定的数据,使用!一分为二。 例如:

S!ARC!256!547291!840.50!9038.00!840.50!9038.00!519.50!9038.00!321.00!0.00!COUNTERCLOCKWISE!ASSEMBLY_TOP!BAT-2-CR1632-T0_R!BT2K!
所以,当我使用!并将其放入数组中,该数组应包含16个数据。但我面临的问题是,当数据

S!LINE!257!37825 1!3525.00!10720.00!4525.00!10720.00!6.00!!!!!ASSEMBLY_TOP!CSCO-LABEL-ASY-73-SN-COMB_R!! 
并且它忽略最后一个为null或“”的数据。因此,当我尝试获取数据[15]时,ArrayIndexOutOfBoundsException的问题会突然出现。下面是我编写的一些代码:

String[] data = $LINE_LIST.get(k).split("!");                     
if ($LINE_LIST.get(k).startsWith("S!") &&  $LINE_LIST.get(k).contains("ASSEMBLY_TOP"))
                    { 

                            $GRAPHIC.append(data[15])
                                .append("!")
                                .append(data[14])
                                .append("!")
                                .append("TOP")
                                .append("\n");
                    }

任何解决此问题的方法???

split
都会消除尾随的空字符串。因此,在您的示例中,数组的长度为15,因此
data[15]
超出了范围

0 "S"
1 "LINE"
2 "257"
3 "37825 1"
4 "3525.00"
5 "10720.00"
6 "4525.00"
7 "10720.00"
8 "6.00"
9 ""
10 ""
11 ""
12 ""
13 "ASSEMBLY_TOP"
14 "CSCO-LABEL-ASY-73-SN-COMB_R"
在访问
数据[15]
之前,必须检查
data.length>15

这里有一段相关引用自
split
的Javadoc:

该方法的工作原理类似于使用给定表达式和零限制参数调用双参数split方法。因此,结果数组中不包括尾随的空字符串

试试这个:

String s="S!LINE!257!37825 1!3525.00!10720.00!4525.00!10720.00!6.00!!!!!ASSEMBLY_TOP!CSCO-LABEL-ASY-73-SN-COMB_R!! ";
        String arr[]=s.split("!"); // split line with delimiter !
        List<String> list = new ArrayList<String>(Arrays.asList(arr));
        list.removeAll(Arrays.asList("", null)); // remove empty entry
        System.out.println(list); // now list contains your desired data

我第一次看到变量名以$?开头,格式很差。请改进。它是$GRAPHIC的字符串生成器,$LINE_列表是ArrayList,所以我应该在if中再添加一个条件,使其看起来像这样?如果($LINE_LIST.get(k).startsWith(“S!”)&&$LINE_LIST.get(k).包含(“ASSEMBLY_TOP”)&&data.length>15)@Jian.Eoh,您还应该确保
数据[14]
有效。它在您的示例输入中,但我不知道它是否对任何输入有效。
[S, LINE, 257, 37825 1, 3525.00, 10720.00, 4525.00, 10720.00, 6.00, ASSEMBLY_TOP, CSCO-LABEL-ASY-73-SN-COMB_R,  ]