我正在尝试拆分字符串,但它似乎没有给出正确的输出 这是正在传递的字符串
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
?
干杯
Canvas
最佳答案
您的代码中存在错误,导致其拆分 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)
}
关于Java .split 奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15673610/