2012-03-13 184 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獲得單個結果。