ArrayList忽略null值导致ArrayIndexOutOfBoundsException

时间:2015-09-21 06:55:30

标签: 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.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");
                    }

有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

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"

在访问data.length > 15之前,您必须先检查data[15]

以下是来自split的Javadoc的相关引用:

  

此方法的工作方式就像调用带有给定表达式和limit参数为零的双参数split方法一样。因此,结尾的空字符串不包含在结果数组中。

答案 1 :(得分:0)

试试这个:

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

现在您可以从列表中访问特定数据

[S, LINE, 257, 37825 1, 3525.00, 10720.00, 4525.00, 10720.00, 6.00, ASSEMBLY_TOP, CSCO-LABEL-ASY-73-SN-COMB_R,  ]