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);
}
}