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

时间:2012-03-13 14:38:37

标签: 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]));
}

如果我取消注释其中任何一行,我会得到ArrayOutofBoundsException: 1。 println总是返回True,String的长度,然后是String中的_字符串 - 不在最后。

我已经尝试了.split()的负参数,将String转换为char数组并使用indexOf()打破String以查找_的位置,然后使用{{1}手动拆分它}}。 String本身可能有问题,但这里是字符串数组的代码:substring()

3 个答案:

答案 0 :(得分: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]));
}

您编写它的方式,即使字符串不包含下划线,也会将其拆分。只有“True [...]”的输出仅限于包含一个的字符串。

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

答案 1 :(得分:4)

您的意思是将所有代码放入大括号吗?

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]));
    }
}

答案 2 :(得分:3)

您的if条件仅适用于下一行。因此,如果temparray.get(i)不包含'_',则只能从split中获得单个结果。