2

嗨,我对 Stack Overflow 还是很陌生,所以我希望我做的正确,并且那里的人有我需要的答案。

我目前正在使用 Eclipse IDE 编写 Java 程序,我的问题是:

我需要一段代码来执行以下操作

它应该得到一个包含文本的 .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();     
    }
}
4

5 回答 5

5

这听起来有点像家庭作业,不能保证提供完整的答案,但我会给你一些关于在哪里查看 Java API 的提示:

FileReader 和 BufferedReader 用于获取数据。 Collections API 用于存储数据 自定义数据结构,用于存储单词列表和出现计数 Comparator 或 Comparable 用于对数据结构进行排序以获得前 10 个列表

一旦您开始工作并有一些功能并需要具体帮助,请回到这里提出具体问题,然后我们会尽力帮助您。

祝你好运!

于 2009-01-29T10:52:28.707 回答
2

在Google中输入“java count words example”会得到一些建议。

这个链接看起来是一个不错的起点。

此处的这个简单示例也可能会给您一些想法:

public class WordCount
{
  public static void main(String args[]) 
  {
    System.out.println(java.util.regex.Pattern.compile("[\\w]+").split(args[0].trim()).length);
  }
}
于 2009-01-29T10:55:43.863 回答
2

这是一个解决方案:

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();
    }

}
于 2009-01-29T11:56:47.093 回答
0

不是一个完整的答案,但我建议查看 Sun 的 Java IO 教程。它处理文件的读取和写入。特别是有关扫描仪和格式化程序的教程

这是网站上的教程摘要

I/O 编程通常涉及与人类喜欢使用的格式整齐的数据进行转换。为了帮助您完成这些琐事,Java 平台提供了两个 API。扫描仪 API 将输入分解为与数据位相关联的单个令牌。格式化 API 将数据组装成格式良好、人类可读的形式。

所以对我来说,它看起来正是你要问的 API

于 2009-01-29T10:54:31.027 回答
0

您可能会从使用Apache Commons Utils中获得一些优势,它有一个名为 WordUtil 的方便实用程序,它可以用句子和单词做一些简单的事情。

于 2009-01-29T14:24:44.113 回答