计数字符串出现次数java

时间:2016-10-14 08:16:48

标签: java if-statement iterator

我有一个

Iterator<Text> values

其中每个文本都包含句点/类型对。

看起来像这样

早上短信
早上的声音
早上短信
早上短信
早上的声音
一天短信
天声 晚上短信
晚上的声音 晚上短信
晚上的声音 晚上短信
晚上的声音 晚上短信
晚上的声音 晚上短信
夜晚的声音 晚上短信
夜间声音

有没有办法计算一对没有很多if else块出现的次数?

结果应该是

3点钟上午短信 2早上的声音
1天短信
1天的声音
3晚上短信
3晚上的声音
2夜的声音
2夜的声音

4 个答案:

答案 0 :(得分:2)

使用Streams.collect:

    List<String> values = new ArrayList<>();

    values.add("morning");
    values.add("evening");
    values.add("morning");

    // Function.identity() means p->p, since example collection is very simple
    // If your objects are more than strings, you'll need to map them: p -> p.getName(), for example
    Map<String, Long> collect =
            values.stream().collect(groupingBy(Function.identity(), counting()));

    System.out.println(collect);

答案 1 :(得分:1)

你可以这样做

HashMap<String, Integer> maps = new HashMap<>();
      while(itr.hasNext()) {
          Object element = itr.next();
          Integer i = maps.get(element.toString());
          if(i == null) {
              maps.put(element.toString(), 1);
          }
          else {
              maps.put(element.toString(), ++i);
          }
       }

      //See result
      for(Entry<String, Integer> e : maps.entrySet()) {
          System.out.println(e.toString());  
      }

答案 2 :(得分:1)

首先使用HashMap<Text,Integer>来跟踪TextkeyIntegervalue的每个不同时段/类型对频率。

HashMap<Text,Integer> m = new HashMap<Text,Integer>();
//Populate the HashMap
while(values.hasNext()) 
{
  Text element = values.next();
  if(m.get(element) == null)
  {
   m.put(element , 1);
  }       
  else m.put(element , m.get(element) + 1);   
}

//Display the frequencies
for (Map.Entry<Text, Integer> entry : m.entrySet())
{
    System.out.println(entry.getValue() + "/" + entry.getKey().period  );
}

我假设Text是包含名为period的公共字段的类,其中包含morning sms

等字符串

答案 3 :(得分:0)

尝试此方法,例如

public static int countStringOccurrences(String text, String pattern) {

int count = 0;
int i = 0;
// Keep calling indexOf for the pattern.
while ((i = text.indexOf(pattern, i)) != -1) {
    // Advance starting index.
    i += pattern.length();
    // Increment count.
    count++;
}
return count;
}

阅读:

https://www.dotnetperls.com/string-occurrence-java