package com.levelup.java.string; import static org.junit.Assert.assertEquals; import java.io.IOException; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; import org.junit.Test; import com.google.common.base.Splitter; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multiset; import com.google.common.collect.Multiset.Entry; /** * This java example will calculate the most frequent char in a string. * * @author Justin Musgrove * @see <a href= * 'http://www.leveluplunch.com/java/examples/group-count-repeating-characters-in-string/' * > M o s t frequent char in string</a> */ public class MostFrequentCharInString { static String sentence = "What is the most frequent chars within this sentencee"; @Test public void most_frequent_char_java() { Map<String, Long> charCount = new HashMap<>(); for (char charachter : sentence.toLowerCase().toCharArray()) { String charAsString = Character.toString(charachter); if (charCount.containsKey(charAsString)) { long val = charCount.get(charAsString) + 1; charCount.put(charAsString, val); } else { charCount.put(charAsString, 1l); } } System.out.println(charCount); assertEquals(7, charCount.get("e"), 0); } @Test public void most_frequent_char_java8() throws IOException { Map<String, Long> frequentChars = Arrays.stream( sentence.toLowerCase().split("")).collect( Collectors.groupingBy(c -> c, Collectors.counting())); frequentChars.forEach((k, v) -> System.out.println(k + ":" + v)); assertEquals(7, frequentChars.get("e"), 0); } @Test public void most_frequent_char_guava() throws IOException { Multiset<String> frequentCharacters = HashMultiset.create(Splitter .fixedLength(1).split(sentence.toLowerCase())); for (Entry<String> item : frequentCharacters.entrySet()) { System.out.println(item.getElement() + ":" + item.getCount()); } assertEquals(7, frequentCharacters.count("e"), 0); } }