0

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

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

4 回答 4

1

第一次,i0。这基本上意味着dataArray[0],即1。因此,当您这样做时:-

String[] pos = dataArray[i++].split(":");

pos在数组(即) pos[0]中只有 1 个元素,即1. 因此,如果您尝试访问pos[1]or pos[2],您将获得ArrayIndexOutOfBoundsException.

于 2013-03-28T03:17:17.733 回答
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)
}
于 2013-03-28T03:22:07.530 回答
0

pos 被创建了两次,一次只有 1 作为一个元素。第二次它将有 0、250、250。

于 2013-03-28T03:18:39.983 回答
0

我相信这个问题是由于 split 函数采用正则表达式(regex)。

因为冒号是正则表达式中的特殊字符,所以必须用反斜杠对其进行转义。

在 Java 中,您必须使用另一个反斜杠来转义一个反斜杠。

因此,请尝试在“\\:”上拆分,而不仅仅是“:”

于 2013-03-28T03:20:13.287 回答