为什么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()
。
答案 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中获得单个结果。