Skip to content

Instantly share code, notes, and snippets.

@Andersos
Created January 23, 2013 19:30
Show Gist options
  • Select an option

  • Save Andersos/4611945 to your computer and use it in GitHub Desktop.

Select an option

Save Andersos/4611945 to your computer and use it in GitHub Desktop.

Revisions

  1. Anders Sandvik created this gist Jan 23, 2013.
    65 changes: 65 additions & 0 deletions anagram.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,65 @@
    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();
    }
    }
    }
    }