我试图从使用的行中获取特定数据!分裂。 例如:
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");
}
有什么方法可以解决这个问题吗?
答案 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, ]