2017-02-26 52 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

谢谢。这就说得通了。 –

相关问题