我正在尝试拆分一个字符串,但它似乎没有给出正确的输出 这是传递的字符串
1#0:250:250:
我先这样做
String[] dataArray = data.split("#");
这给了我
1
0:250:250:
然后我这样做
for( int i = 0; i < totalPlayers; i++)
{
String[] pos = dataArray[i++].split(":");
if( Integer.parseInt( pos[0] ) == ID )
{
//do nothing
}
else
{
assets[i].setPosition( Integer.parseInt( pos[1] ), Integer.parseInt( pos[2] ) );
}
}
我得到一个错误说ArrayIndexOutOfBoundsException,如果我打印出pos [0]我得到1,如果我打印出pos [1]我得到ArrayIndexOutOfBoundsException, 为什么我的字符串不会分成
0
250
250
干杯
帆布
答案 0 :(得分:1)
首次i
为0
。这基本上意味着dataArray[0]
,即1
。因此,当你这样做时: -
String[] pos = dataArray[i++].split(":");
您的pos
数组中只有1个元素(即。) pos[0]
,即1
。因此,如果您尝试访问pos[1]
或pos[2]
,则会获得ArrayIndexOutOfBoundsException
。
答案 1 :(得分:1)
您的代码中存在错误导致其分割1
而不是0:250:250:
。回想一下,后缀增量运算符(例如i++
)在表达式中使用之后递增变量。所以循环中的第一行真的是在说String[] pos = dataArray[i].split(":"); i = i + 1;
。
简单的解决方法是将i++
更改为++i
,这实际上会使该行以i = i + 1; String[] pos = dataArray[i].split(":");
运行。但是,这个确切的错误是为什么在复杂语句中使用++
运算符会让人感到困惑,而且常常不鼓励这样做。此外,在for
语句之外增加循环变量可能会导致额外的混淆。
由于您真正想要表达的想法是“通过成对循环”,我建议写一些类似
的内容for (int i = 0; i < totalPlayers; i += 2) {
String[] pos = dataArray[i + 1].split(":");
// (the same as above)
}
答案 2 :(得分:0)
pos创建两次,一次只有1作为元素。第二次它会有0,250,250。
答案 3 :(得分:0)
我认为这个问题是由于split函数采用正则表达式(regex)这一事实。
因为冒号是正则表达式中的特殊字符,所以必须使用反斜杠对其进行转义。
在Java中,您必须使用另一个反斜杠转义反斜杠。
所以,尝试拆分“\\:”而不只是“:”