Skip to content

Instantly share code, notes, and snippets.

@Andersos
Created January 23, 2013 19:30
Show Gist options
  • Save Andersos/4611945 to your computer and use it in GitHub Desktop.
Save Andersos/4611945 to your computer and use it in GitHub Desktop.
Anagram finder
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
public class anagram {
public static void main(String[] args) {
File file = new File(args[0]);
Map<String, LinkedList<String>> anagrams = findAnagrams(file);
if (anagrams != null) {
printAnagrams(anagrams);
} else {
System.out.println("Could not find any anagrams in, or parse contents of: " + args[0]);
}
}
private static Map<String, LinkedList<String>> findAnagrams(File file) {
Map<String, LinkedList<String>> anagrams = new TreeMap<String, LinkedList<String>>();
BufferedReader in = null;
try {
in = new BufferedReader(new FileReader(file));
for (String line = in.readLine(); line != null; line = in.readLine()) {
char[] key = line.toCharArray();
Arrays.sort(key);
String sortedkey = new String(key);
if (!anagrams.containsKey(sortedkey)) {
anagrams.put(sortedkey, new LinkedList<String>());
}
anagrams.get(sortedkey).add(line);
}
} catch (IOException e) {
e.printStackTrace();
anagrams = null;
} finally {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return anagrams;
}
private static void printAnagrams(Map<String, LinkedList<String>> anagrams) {
for(Entry<String, LinkedList<String>> entry : anagrams.entrySet()) {
if(entry.getValue().size() > 1) {
for (String value : entry.getValue()) {
System.out.print(value + " ");
}
System.out.println();
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment