[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/primary-code-test/Java/dev/Others/TopKWords.java [Back]  [Original]

package Others;

import java.io.*;
import java.util.*;

/* display the most frequent K words in the file and the times it appear
in the file  shown in order (ignore case and periods) */

public class TopKWords {
  static class CountWords {
    private String fileName;

    public CountWords(String fileName) {
      this.fileName = fileName;
    }

    public Map getDictionary() {
      Map dictionary = new HashMap();
      FileInputStream fis = null;

      try {

        fis = new FileInputStream(fileName); // open the file
        int in = 0;
        String s = ""; // init a empty word
        in = fis.read(); // read one character

        while (-1 != in) {
          if (Character.isLetter((char) in)) {
            s += (char) in; // if get a letter, append to s
          } else {
            // this branch means an entire word has just been read
            if (s.length() > 0) {
              // see whether word exists or not
              if (dictionary.containsKey(s)) {
                // if exist, count++
                dictionary.put(s, dictionary.get(s) + 1);
              } else {
                // if not exist, initiate count of this word with 1
                dictionary.put(s, 1);
              }
            }
            s = ""; // reInit a empty word
          }
          in = fis.read();
        }
        return dictionary;
      } catch (IOException e) {
        e.printStackTrace();
      } finally {
        try {
          // you always have to close the I/O streams
          if (fis != null) fis.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
      return null;
    }
  }

  public static void main(String[] args) {
    // you can replace the filePath with yours
    CountWords cw = new CountWords("/Users/lisanaaa/Desktop/words.txt");
    Map dictionary =
        cw.getDictionary(); // get the words dictionary: {word: frequency}

    // we change the map to list for convenient sort
    List list = new ArrayList(dictionary.entrySet());

    // sort by lambda valueComparator
    list.sort(Comparator.comparing(m -> m.getValue()));

    Scanner input = new Scanner(System.in);
    int k = input.nextInt();
    while (k > list.size()) {
      System.out.println("Retype a number, your number is too large");
      input = new Scanner(System.in);
      k = input.nextInt();
    }
    for (int i = 0; i < k; i++) {
      System.out.println(list.get(list.size() - i - 1));
    }
    input.close();
  }
}

Web Proxy Viewer  |  New URL  |  Original Page