重复一个字符串

时间:2016-09-18 13:51:28

标签: java loops if-statement arraylist

我试图从给定的ArrayLists中获取字符串的所有重复。我通过使用以下代码实现了这一点:

public static void howmany (ArrayList <String> list)
{
    for (int i=0; i<list.size();i++)
    {
        System.out.println(list.get(i)+ ": " + Collections.frequency(list, list.get(i)));
    }
}

但是,输出如下:

  抱歉:4棒球:1对不起:4对不起:4对不起:4火车:2火车:2泰迪:2   泰迪:2球:2球:2

Runner类中的代码是:

ArrayList<String> toys = new ArrayList <String>();

String[] toys1 = {"sorry", "bat", "sorry", "sorry", "sorry", "train", "train", "teddy", "teddy", "ball", "ball"};

for (int i=0; i<toys1.length;i++)
{
    toys.add(toys1[i]);
}

Toys.howmany(toys);

有没有一种方法输出不重复这些词? 例如,它只是说:

  抱歉:4,蝙蝠:1,火车:2,泰迪:2,球:2

我是初学者,我还在努力学习java逻辑!

5 个答案:

答案 0 :(得分:3)

您可以存储已打印的值,然后在每次打印值时进行检查,以便消除重复。

例如,你可以这样做:

public static void howmany (ArrayList <String> list)
{
    Set<String> processed = new HashSet<>();
    for (int i=0; i<list.size();i++)
    {
        if(!processed.contains(list.get(i))) {
            System.out.println(list.get(i) + ": " + Collections.frequency(list, list.get(i)));
            processed.add(list.get(i));
        }
    }
}

答案 1 :(得分:1)

为此目的使用HashMap。首先,遍历整个ArrayList并将这些字符串添加为键,如果找到新字符串或增加相应键的值,则将其值设为1

if(myMap.contains("foo"))
    myMap.put("foo",myMap.get("foo")++);
else
    myMap.put("foo",1);

我希望这可能有所帮助。

答案 2 :(得分:0)

我可以给你2个简单的方法。

您可以使用一套来检查重复项。创建一个hashset并将list.get(i)添加到它使用if条件中的返回值。只有在set中没有添加hashset的add方法才会返回true,否则它将返回false。

或者,您可以从列表中创建一个哈希集,并遍历您的哈希集以消除任何重复项。

快乐的节目!

答案 3 :(得分:0)

只需使用hashmap,就像这样

String[] toys1 = {"sorry", "bat", "sorry", "sorry", "sorry", "train", "train", "teddy", "teddy", "ball", "ball"};
Map<String,Integer> toyMap = new HashMap<String,Integer>();
for(String str:toys1){
    if(toyMap.containsKey(str)){
        toyMap.put(str, toyMap.get(str)+1);
    }else{
        toyMap.put(str, 1);
    }
}
for (Map.Entry<String, Integer> entry : toyMap.entrySet()) {
    System.out.println(entry.getKey()+"  : "+entry.getValue());
}

答案 4 :(得分:0)

这是使用hashmap的O(n)解决方案:

 public static void howmany (List <String> list)
  {
        Map<String,Integer> counts = new HashMap<>();

        for (String item:list)
        {
            counts.put(item, counts.getOrDefault(item,0)+1);          

        }
    System.out.println(counts);
  }



  public static void main(String []args){

     String[] toys1 = {"sorry", "bat", "sorry", "sorry", "sorry", "train", "train", "teddy", "teddy", "ball", "ball"};


    howmany(Arrays.<String>asList(toys1));
  }