Introduction

Advanced character frequency analysis is crucial for text processing, cryptanalysis, and data analysis.


Method 1: Using HashMap

import java.util.HashMap;
import java.util.Map;

public class CharacterFrequency {
    
    public static Map<Character, Integer> getCharFrequency(String str) {
        Map<Character, Integer> frequency = new HashMap<>();
        
        for (char ch : str.toCharArray()) {
            if (Character.isLetterOrDigit(ch)) {
                char lower = Character.toLowerCase(ch);
                frequency.put(lower, frequency.getOrDefault(lower, 0) + 1);
            }
        }
        
        return frequency;
    }
    
    public static void main(String[] args) {
        String text = "programming";
        Map<Character, Integer> freq = getCharFrequency(text);
        
        freq.entrySet().stream()
            .sorted((a, b) -> b.getValue().compareTo(a.getValue()))
            .forEach(e -> System.out.println(e.getKey() + ": " + e.getValue()));
    }
}

Method 2: Using Streams

import java.util.stream.Collectors;

public class CharacterFrequencyStream {
    
    public static void main(String[] args) {
        String text = "hello world";
        
        text.toLowerCase().chars()
            .filter(Character::isLetter)
            .boxed()
            .collect(Collectors.groupingBy(c -> (char)c.intValue(), Collectors.counting()))
            .forEach((ch, count) -> System.out.println(ch + ": " + count));
    }
}

Method 3: Character Array (ASCII)

public class CharacterFrequencyArray {
    
    public static int[] getFrequency(String str) {
        int[] frequency = new int[256];
        
        for (char ch : str.toLowerCase().toCharArray()) {
            frequency[ch]++;
        }
        
        return frequency;
    }
}

Frequently Asked Questions

Q1. Include special characters?

Answer: Default no, add condition to include.

Q2. Case sensitivity?

Answer: Convert to lowercase.

Advertisement

Q3. Sort by frequency?

Answer: Use sorted() in streams.

Q4. Most frequent character?

Answer: Find max in frequency map.

Q5. Large text files?

Answer: Streams handle memory efficiently.

Q6. Performance?

Answer: HashMap O(n), Array O(n).

Q7. Unicode characters?

Answer: HashMap supports all Unicode.

Q8. Exclude spaces?

Answer: Filter with:

!Character.isWhitespace()

Q9. Print in order?

Answer: Don't remove spaces, or track separately.

Q10. Export results?

Answer: Convert to JSON format.


Conclusion

Choose based on:

  • ASCII only: Character array
  • Unicode: HashMap
  • Modern Java: Streams
  • Analysis: All methods work