Java .split 奇怪的结果

标签 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

干杯

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/

相关文章:

java - SQLite 保存重复项

android - 无法开始调试 : Cannot connect to 127. 0.0.1:29308

java - 提交响应后如何解决无法调用 sendRedirect() 的问题?

java - Java EE的ASP.NET MVC框架端口?

java - 为什么RequestMapping注释不能与springboot应用程序中的类一起使用?

java.lang.IllegalArgumentException : addChild: Child name '/' is not unique

android - 他们如何在 webview 而不是 androids 内部浏览器中加载 url?

java - 无法从主要 Activity 转到另一个 Activity ,应用程序崩溃

Android Studio,Windows : ADB not responding. 如果您想重试,请手动杀死 "adb.exe"并单击 'Restart'

android - 在手机上更改设置或执行任务的 adb shell 命令