</>

Technology

Java Programs

Difficulty

Intermediate

Interview Question

Write a Java program to find the frequency of each character in a string.

Answer

Frequency of Each Character in a String

Method 1: HashMap

Java
import java.util.*;

public class CharFrequency {
    public static void main(String[] args) {
        String str = "automation";

        HashMap<Character, Integer> freq = new HashMap<>();

        for (char c : str.toCharArray()) {
            freq.put(c, freq.getOrDefault(c, 0) + 1);
        }

        System.out.println("Character Frequencies:");
        for (Map.Entry<Character, Integer> entry : freq.entrySet()) {
            System.out.println("'" + entry.getKey() + "' → " + entry.getValue());
        }
    }
}

Output

CODE
Character Frequencies:
'a' → 3
'u' → 1
't' → 2
'o' → 2
'm' → 1
'i' → 1
'n' → 1

Sorted by Frequency (Descending)

Java
String str = "automation testing";

Map<Character, Long> freq = str.chars()
    .filter(c -> c != ' ')
    .mapToObj(c -> (char) c)
    .collect(java.util.stream.Collectors.groupingBy(
        c -> c, java.util.stream.Collectors.counting()));

// Sort by value descending
freq.entrySet().stream()
    .sorted(Map.Entry.<Character, Long>comparingByValue().reversed())
    .forEach(e -> System.out.println("'" + e.getKey() + "' → " + e.getValue()));

Output

CODE
't' → 4
'a' → 2
'i' → 2
'o' → 2
'n' → 2
's' → 1
'e' → 1
'u' → 1
'm' → 1
'g' → 1

Find Most and Least Frequent Character

Java
String str = "automation";

Map<Character, Integer> freq = new HashMap<>();
for (char c : str.toCharArray())
    freq.put(c, freq.getOrDefault(c, 0) + 1);

char maxChar = Collections.max(freq.entrySet(),
    Map.Entry.comparingByValue()).getKey();

char minChar = Collections.min(freq.entrySet(),
    Map.Entry.comparingByValue()).getKey();

System.out.println("Most frequent:  '" + maxChar + "' (" + freq.get(maxChar) + " times)");
System.out.println("Least frequent: '" + minChar + "' (" + freq.get(minChar) + " time)");

Output

CODE
Most frequent:  'a' (3 times)
Least frequent: 'u' (1 time)

Print Frequency Chart

Java
String str = "banana";

Map<Character, Long> freq = str.chars()
    .mapToObj(c -> (char)c)
    .collect(java.util.stream.Collectors.groupingBy(
        c -> c, LinkedHashMap::new, java.util.stream.Collectors.counting()));

freq.forEach((ch, count) -> {
    System.out.printf("'%c': %s (%d)%n", ch, "*".repeat(count.intValue()), count);
});

Output

CODE
'b': * (1)
'a': *** (3)
'n': ** (2)

Automation Testing Relevance

Java
// Count tag occurrences on a page
List<WebElement> elements = driver.findElements(By.cssSelector("*"));
Map<String, Long> tagFreq = elements.stream()
    .collect(Collectors.groupingBy(
        e -> e.getTagName().toLowerCase(), Collectors.counting()));
tagFreq.entrySet().stream()
    .sorted(Map.Entry.<String, Long>comparingByValue().reversed())
    .limit(5)
    .forEach(e -> System.out.println(e.getKey() + ": " + e.getValue()));

Follow AutomateQA