2012-03-13 145 views
0

为什么拆分方法不返回包含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,字符串的长度,然后返回一个位于字符串中的字符串 - 不在结尾处的为_

我试过负参数.split(),转换字符串字符数组,打破使用indexOf()找到_位置,然后用手动substring()分裂它的字符串。字符串本身可能有问题,但这里是字符串数组的代码:ArrayList<String> temparray = new ArrayList<String>();

+2

temparray.get(i)中存储的确切字符串值是什么? – 2012-03-13 14:40:59

+0

你使用什么字符串代码?向我们展示一些示例,以便帮助您找到解决方案。 – pcalcao 2012-03-13 14:41:17

+0

正如其他人提到它:你可能忘记了一些括号。但是请注意,不包含尾随的空字符串,因此字符串“foo_”也将只返回一个元素,即使它包含分隔符(请参阅:http://docs.oracle.com/javase/1.4.2/文档/ API /爪哇/郎/ String.html#分裂%28java.lang.String%29) – 2012-03-13 14:44:43

回答

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 [...]”的输出限于包含一个的字符串。

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

+0

我不打算让它有支架。 if语句只是为了确保字符串对于“拆分”是有效的。 'temparray'的每个元素对于'contains()'返回True。 – sushain97 2012-03-13 14:43:50

+0

你确定每个元素都包含和下划线(不仅是你打印到控制台的元素)吗?异常发生在哪个元素上? – Matthias 2012-03-13 14:45:15

+0

你的评论让我意识到了一些事情,并增加了另一个'inStream.readLine();'它正常工作。我先读错了一行,一次。谢谢。 – sushain97 2012-03-13 14:51:24

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

我并不打算让它有大括号。 if语句只是为了确保字符串对于“拆分”是有效的。 'temparray'的每个元素对于'contains()'返回True。 – sushain97 2012-03-13 14:48:23

3

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