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.
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