Считать строки, слова, символы и первые десять слов? - PullRequest
2 голосов
/ 29 января 2009

Привет, я довольно новичок в Stack Overflow, так что я надеюсь, что я делаю это правильно и у кого-то есть ответ, который мне нужен.

В настоящее время я пишу программу на Java с Eclipse IDE, и мой вопрос:

Мне нужен фрагмент кода, который делает следующее

Предполагается получить файл .TXT, содержащий текст, и из этого файла .TXT. посчитать количество строк и распечатать его, посчитать количество слов и распечатать его, посчитать количество символов и распечатать его. И, наконец, составьте список из 10 лучших используемых слов и напечатайте его.

Вся печать выполняется в системе outprintln

Я довольно новичок в Java и испытываю некоторые трудности.

Кто-нибудь, кто может предоставить мне эти строки кода или кто знает, где я могу их найти? Я хочу изучить код при условии, что я учусь лучше всего =)

Спасибо всем

Не нашел кнопку редактирования Извините ...

Я добавил это к своему вопросу:

Хе-хе, это задание, а не домашнее задание. Хорошо, я хорошо понимаю, что могу представить то, что я уже сделал, я думаю, что я довольно близок, но это не работает для меня. Я что-то пропустил?

// Class    Tip


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

class Tip
{
    public static void main(String [] args) throws Exception
    {

        String root = System.getProperty("user.dir");   
        InputStream is = new FileInputStream( root + "\\tip.txt" );
        Scanner scan = new Scanner( is );

        String tempString = "";
        int lines = 0;
        int words = 0;
        Vector<Integer> wordLength = new Vector<Integer>();
        int avarageWordLength = 0;

        while(scan.hasNextLine() == true)
        {
                tempString = scan.nextLine();
                lines++;
        }

        is.close();

        is = new FileInputStream( root );
        scan = new Scanner( is );

        while(scan.hasNext() == true)
        {
                tempString = scan.next();
                wordLength.add(tempString.length());
                words++;
        }

        for(Integer i : wordLength)
        {
                avarageWordLength += i;
        }
        avarageWordLength /= wordLength.size();


        System.out.println("Lines : " + lines);
        System.out.println("Words : " + words);
        System.out.println("Words Avarage Length : " + avarageWordLength);

        is.close();     
    }
}

Ответы [ 5 ]

5 голосов
/ 29 января 2009

Это звучит слишком похоже на домашнее задание на ордер, дающее полный ответ, но я дам вам несколько советов о том, где искать в Java API:

FileReader и BufferedReader для получения данных. API коллекций для хранения ваших данных Пользовательская структура данных для хранения вашего списка слов и количества вхождений Comparator или Comparable для сортировки вашей структуры данных, чтобы получить список 10 лучших

Как только вы начали работать, у вас что-то работает и вам нужна конкретная помощь, возвращайтесь сюда с конкретными вопросами, и тогда мы сделаем все возможное, чтобы помочь вам.

Удачи!

2 голосов
/ 29 января 2009

Вот решение:

public static void main(String[] args) {
    int nRows = 0;
    int nChars = 0;
    int nWords = 0;

    final HashMap<String, Integer> map = new HashMap<String, Integer>();

    try {
        BufferedReader input = new BufferedReader(new FileReader("c:\\test.txt"));
        try {
            String line = null;
            Pattern p = Pattern.compile("[^\\w]+");
            while ((line = input.readLine()) != null) {
                nChars += line.length();
                nRows++;
                String[] words = p.split(line);
                nWords += words.length;
                for (String w : words) {
                    String word = w.toLowerCase();
                    Integer n = map.get(word);
                    if (null == n)
                        map.put(word, 1);
                    else
                        map.put(word, n.intValue() + 1);
                }
            }
            TreeMap<String, Integer> treeMap = new TreeMap<String, Integer>(new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                    if (map.get(o1) > map.get(o2))
                        return -1;
                    else if (map.get(o1) < map.get(o2))
                        return 1;
                    else
                        return o1.compareTo(o2);

                }
            });
            treeMap.putAll(map);

            System.out.println("N.º Rows: " + nRows);
            System.out.println("N.º Words: " + nWords);
            System.out.println("N.º Chars: " + nChars);
            System.out.println();
            System.out.println("Top 10 Words:");    
            for (int i = 0; i < 10; i++) {
                Entry<String, Integer> e = treeMap.pollFirstEntry();
                System.out.println("Word: " + e.getKey() + "  Count: " + e.getValue());
            }

        } finally {
            input.close();
        }
    } catch (IOException ex) {
        ex.printStackTrace();
    }

}
2 голосов
/ 29 января 2009

Набрав "пример количества слов java" в Google выдвинул несколько предложений.

Эта ссылка выглядит неплохой отправной точкой.

Этот простой пример из здесь может также дать вам несколько идей:

public class WordCount
{
  public static void main(String args[]) 
  {
    System.out.println(java.util.regex.Pattern.compile("[\\w]+").split(args[0].trim()).length);
  }
}
0 голосов
/ 29 января 2009

Вы можете получить некоторые рычаги от использования Apache Commons Utils , который имеет удобную утилиту под названием WordUtil, которая делает некоторые простые вещи с предложениями и словами.

0 голосов
/ 29 января 2009

Не полный ответ, но я бы порекомендовал взглянуть на учебники Sun по Java IO Это касается чтения и записи из файлов. Особенно учебник по сканерам и форматерам

Вот краткое изложение учебника с веб-сайта

Программирование ввода / вывода часто включает переводить и из аккуратно отформатированные данные люди любят работать с. Чтобы помочь вам с этими делами, платформа Java предоставляет два API. API сканера разбивает ввод на отдельные токены, связанные с битами данных. API форматирования собирается данные в хорошо отформатированном, читабельная форма.

Так что мне кажется, что это именно те API, о которых вы спрашиваете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...