Java .split奇怪的结果

时间:2013-03-28 03:11:34

标签: java android adb

我正在尝试拆分一个字符串,但它似乎没有给出正确的输出 这是传递的字符串

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

干杯

帆布

4 个答案:

答案 0 :(得分:1)

首次i0。这基本上意味着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中,您必须使用另一个反斜杠转义反斜杠。

所以,尝试拆分“\\:”而不只是“:”