字符串拆分方法不会返回两个字符串

sus*_*n97 0 java string split

为什么split方法不返回包含2个元素的数组?

for(int i = 0; i < temparray.size(); i++)
{
if (temparray.get(i).contains("_"))
    System.out.println("True" + temparray.get(i).length() + " " + temparray.get(i));
String[] temp = temparray.get(i).split("_");
System.out.println(temp[0]);
//System.out.println(temp[1]);
//friendsOld.add(new Friend(temp[0],temp[1]));
}
Run Code Online (Sandbox Code Playgroud)

如果我取消注释任何一行,我得到ArrayOutofBoundsException: 1.println总是返回True,String的长度,然后返回一个_位于String内的String - 不在最后.

我已经尝试了负参数.split(),将String转换为char数组并使用String来打破String indexOf(),_然后使用它来手动分割它substring().String本身可能有问题,但这里是字符串数组的代码:ArrayList<String> temparray = new ArrayList<String>();.

Mat*_*ias 8

看来你忘了if语句之后的大括号:

if (temparray.get(i).contains("_")) {
    System.out.println("True" + temparray.get(i).length() + " " + temparray.get(i));
    String[] temp = temparray.get(i).split("_");
    System.out.println(temp[0]);
    System.out.println(temp[1]);
    friendsOld.add(new Friend(temp[0],temp[1]));
}
Run Code Online (Sandbox Code Playgroud)

你编写它的方式,即使它不包含下划线,字符串也会被拆分.只有"True [...]"的输出仅限于包含一个的字符串.

您应该开始使用调试器 - 它会在命中异常断点时显示变量的值,以便您进一步跟踪代码中的错误.