2017-02-26 65 views
-2

我想開發一個小程序,它讀取一個文本文件並將這些值存儲到列表中。該列表的格式如下:獲取java中列表元素的最後一部分

[1234 nick, 243 56475, 13 mi87ke] 

我要實現什麼目標,是隻提取每個列表的元素的最後一部分。儘管我考慮過兩種不同的方法,但我仍然沒有得到正確的結果。

到目前爲止我的代碼如下:

First approach: 
     index = randomGenerator.nextInt(list.size()); 
     element = list.get(index); 
     while (element.length() < 6 || element.length() > 8) { 
      index = randomGenerator.nextInt(list.size()); 
      element = list.get(index).substring(element.lastIndexOf(" ")+1); 
     } 

Second approach: 
     index = randomGenerator.nextInt(list.size()); 
     element = list.get(index); 
     while (element.length() < 6 || element.length() > 8) { 
      index = randomGenerator.nextInt(list.size()); 
      element = list.get(index); 
      String[] bits = element.split(" "); 
      element = bits[bits.length-1]; 
     } 

從兩種方法的輸出是相同的:

leslie02 
yakumo 
Buddy1 
yaseen 
24 19871 

我注意到通過返回的第一部分,與長度< 6的元件仍印刷隨着第二。任何人都知道爲什麼會發生這種情況,如果有辦法解決這個問題?

+1

護理來解釋你的奇while循環的目的是什麼? –

+0

這是不是很清楚你在問什麼;您將不得不更加清楚地解釋輸入和預期輸出之間的關係。這意味着,你的答案也不是很有用。如果沒有人能理解這個問題,但沒有人會關心答案。 – GhostCat

+0

這只是因爲我對它們的長度大於等於6且小於等於8的元素感興趣。這是我從一開始就錯誤的,因爲我在while循環之前沒有分開前兩個部分的情況下評估元素。 –

回答

0

我找到了解決我的問題:

index = randomGenerator.nextInt(list.size()); 
    element = list.get(index); 
    String[] bits = element.split(" "); 
    element = bits[bits.length-1]; 
    while (element.length() < 6 || element.length() > 8) { 
     index = randomGenerator.nextInt(list.size()); 
     element = list.get(index); 
     bits = element.split(" "); 
     element = bits[bits.length-1]; 
    } 
+0

小心解釋這是如何解決問題的?可能對其他讀者能夠理解有用。 –

+1

在我最初的方法中,我沒有在while循環之前提取元素的最後部分,所以它也返回了第一部分。如果第一部分與第二部分的長度滿足條件,則它將被打印爲正確。通過上述修改,我在while循環之前提取了元素的最後部分,因此程序現在可以實現我從一開始就想到的內容。 –

+1

謝謝。這就說得通了。 –