0

特定のURLアドレスに関連付けられている単語の数を数え、出現した単語の数順に単語を印刷しようとしています。現在、ファイルを読み込んで単語をカウントしますが、パッセージ全体のカウントではなく、行ごとに出力します。それがすべてを読んで、それらの出現とともに全体のパッセージの単語を印刷するのを手伝うことは素晴らしいでしょう。

public static void main(String[] args) 
{
    try {
        URL url = new URL("http://webpagehere.txt");
        BufferedReader reader = new BufferedReader
                (new InputStreamReader(url.openStream()));
        String line;
        int i=0;
        while ((line = reader.readLine()) != null) {
            i++;
            System.out.println("Line " + i + "\t" + line);
             // Create a TreeMap to hold words as key and count as value
Map<String, Integer> map = new TreeMap<String, Integer>();

String[] words = line.split("[ \n\t\r.,;:!?(){}]");
for (int j = 0; j < words.length; j++) {
  String key = words[j].toLowerCase();

  if (key.length() > 0) {
    if (!map.containsKey(key)) {
      map.put(key, 1);
    }
    else {
      int value = map.get(key);
      value++;
      map.put(key, value);
    }
  }
}

// Get all entries into a set
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();

// Get key and value from each entry
for (Map.Entry<String, Integer> entry: entrySet)
  System.out.println(entry.getKey() + "\t" + entry.getValue());


        }

        reader.close();
    } catch (UnknownHostException e) {
        JOptionPane.showMessageDialog(null, "Unknown host. Abort.");
    } catch (NoRouteToHostException e) {
        JOptionPane.showMessageDialog(null,
                                      "Cannot reach remote host. Abort.");
    } catch (java.lang.Exception e) {
        e.printStackTrace();
    }

}
}
4

2 に答える 2

1

Map初期化をwhileループの外側の印刷に移動する必要があります。

public static void main(String[] args) 
    {
        try {
            URL url = new URL("http://webpagehere.txt");
            BufferedReader reader = new BufferedReader
                    (new InputStreamReader(url.openStream()));
            String line;
            int i=0;
            Map<String, Integer> map = new TreeMap<String, Integer>();
            while ((line = reader.readLine()) != null) {
                i++;
                System.out.println("Line " + i + "\t" + line);
                // Create a TreeMap to hold words as key and count as value

                String[] words = line.split("[ \n\t\r.,;:!?(){}]");
                for (int j = 0; j < words.length; j++) {
                    String key = words[j].toLowerCase();

                    if (key.length() > 0) {
                        if (!map.containsKey(key)) {
                            map.put(key, 1);
                        }
                        else {
                            int value = map.get(key);
                            value++;
                            map.put(key, value);
                        }
                    }
                }
            }
            reader.close();

            // Get all entries into a set
            Set<Map.Entry<String, Integer>> entrySet = map.entrySet();

            // Get key and value from each entry
            for (Map.Entry<String, Integer> entry: entrySet)
                System.out.println(entry.getKey() + "\t" + entry.getValue());

        } catch (UnknownHostException e) {
            System.out.println("Unknown host. Abort.");
        } catch (NoRouteToHostException e) {
            System.out.println("Cannot reach remote host. Abort.");
        } catch (java.lang.Exception e) {
            e.printStackTrace();
        }

    }
于 2013-03-25T17:26:19.837 に答える
0

単語を格納するためのあなたmapとその出現は、whileループで宣言されます。宣言をwhileループの外に移動するだけで、機能するようになります。

        int i = 0;
        Map<String, Integer> map = new TreeMap<String, java.lang.Integer>();
        while ((line = reader.readLine()) != null) {
于 2013-03-25T17:27:40.773 に答える