2010-08-22 50 views
0

假设我在ArrayList中有两个相同的字符串......有没有办法检查这个字符串?还有一种方法可以检查ArrayList中的确切字符串是多少次?查找多个字符串的Java ArrayList

让我们说我有以下一个ArrayString。

os.println(itemIDdropped + "|" + spawnX + "|" + spawnY + "|" + currentMap + "|drop|" + me.getUsername()); 
1. 1|3|5|1|drop|Dan 
2. 2|5|7|2|drop|Luke 
3. 1|3|5|2|drop|Dan 
4. 3|3|5|1|drop|Sally 

这里是数字/字母意味着1-4串... 项目ID,X POS,Y POS,地图它的上,命令删除,用户谁把它丢

然后比方说,我把它分解了这样做:

String[] itemGrnd = serverItems.get(i).split("\\|"); 

现在,让我们说我有一个for循环像这样的:

for (int i = 0; x < serverItems.size(); i++) { 
    System.out.println(serverItems.get(i)); 
} 

我想通过serverItems.get(i)找到ArrayList中的任何其他String中的X,Y和Map,或者在这种情况下itemGrnd [1],itemGrnd [2]和itemGrnd [3] 。

如果我们找到任何...(在上例中我提供的... x,y和map对于1和4是相同的......然后创建一个IF语句来做它一次。 ..因为我不想这样做: (顺便说一句,我跟踪我的变量为客户端,所以不用担心这个。是的,我知道它叫做spawnX和spawnY ..这只是当前的X, Y.

if (spawnX.equals(Integer.parseInt(itemGrnd[1])) && 
    spawnY.equals(Integer.parseInt(itemGrnd[2])) && 
    currentMap.equals(Integer.parseInt(itemGrnd[3]))) { 
} 

现在,如果我这样做.... 1和4可以通过这里进行处理。我只想做一次..在任何时候,如果我们发现multple字符串(如1和4)

谢谢

+1

这是很多问题中的一个。尝试一次专注于一个问题。 – cherouvim 2010-08-22 16:14:38

+0

说真的。你设法让一个非常简单的问题看起来非常复杂。 – jvdneste 2010-08-22 16:17:05

+1

它似乎甚至不适合这个问题。 @Dan,尝试对它进行重新说明,使其有意义 – TheLQ 2010-08-22 16:21:20

回答

1

嗯,这是很简单的找到字符串的ArrayList多少有:

public class ArrayListExample { 
    private static final String TO_FIND = "cdt"; 

    public static void main(String[] args) { 
     ArrayList<String> al = new ArrayList<String>(); 
     al.add("abc"); 
     al.add("dde"); 
     //4 times 
     al.add(TO_FIND); 
     al.add(TO_FIND); 
     al.add(TO_FIND); 
     al.add(TO_FIND); 

     ArrayList<String> al1 = (ArrayList<String>) al.clone(); 
     int count = 0; 
     while (al1.contains(TO_FIND)) { 
      al1.remove(TO_FIND); 
      count++; 
     } 
     System.out.println(count); 
    } 
} 
+0

试想一下,如果这个列表中有数千个元素,它将会如何可怕。你必须再次遍历列表的大部分。 – 2010-08-22 18:27:22

0

一个更快的方法是排序的ArrayList,然后看到不同的内容究竟有多少。 Denis_k解决方案是O(n^2),并将它排序为O(nlog(n))。

0

如果你想这种行为,你可能要检查的Apache Commons/Collections项目,它扩展了一些有用的接口,默认的Java集合,包括the bag interfaceJavaDoc),这似乎是你正在寻找的:一个集合知道它包含一种类型的元素。缺点是:目前还没有对泛型的支持,所以你正在使用原始的集合。

Google Guava,这是一个更现代化的图书馆,有一个类似的概念,被称为MultiSet,这可能更加用户友好。然而,番石榴还没有发布版本,尽管它已经被广泛用于生产。

哦,还有一个标准的JavaSE功能:Collections.frequency(Collection, Object),虽然它认为性能很差。