2013-03-13 47 views
-1

我試圖用分隔符(「#」)打印出一個字符串的元素,其中#是分隔元素的字符。我的代碼如下(電影是正在打印的字符串):字符串錯誤地分割

String[] tokens = movies.split("#"); 
for (int i = 0; i < tokens.length; i++){ 
    System.out.println(tokens[i]); 
} 

這裏是電影的內容:

1 Skyfall#2 The Impossible# 

這裏就是BEING打印的內容:

1 Skyfall 
2 The Impossible 
2 

如果我修改代碼因此它循環(tokens.length - 1)次而不是tokens.length,這是打印的:

1 Skyfall 
2 

下面是使字符串存儲在電影中的方法。這使用一個LinkedList。 lineNumbers在這種情況下是正確的。 numItems是LinkedList中Listnode < String>(又名電影)的數量。

String list = ""; 
int pos = 0; 
ListNode node = head; 
if (numItems == 0){ 
    return "Empty"; 
} 
while (pos < numItems){ 
    if (lineNumbers){ 
     list += (pos + 1) + " "; 
    } 
    list += node.getData() + "#"; 
    pos++; 
    if (pos < numItems){ 
     node = node.getNext(); 
    } 
} 
return list; 

我不明白爲什麼它打印的是額外的數字。誰能幫忙?

+0

打印標記的長度,以獲得answser。 – 2013-03-13 05:30:10

+0

你認爲電影的內容不是正在運行的內容。 'split'工作正常,它按照你的預期分裂它。 – Makoto 2013-03-13 05:32:53

+0

什麼是ineNumbers? – smk 2013-03-13 05:33:03

回答

1

之間的不匹配。請檢查你的條件是否爲linen linen.that是真的,當它應該是錯誤的。

和statment POS後++執行第二條件

if (pos < numItems){ 

未被滿足並且它打破。

所以最終你必須

1 007:大破天幕殺機#2不可能的#2#

1

你還沒有發佈你的完整代碼,所以它很難準確。但你的分裂很好。

我敢打賭,這個問題是因爲得到執行兩次在此代碼

list += (pos + 1) + " "; 

lineNumberspos