Topic: 【求助】新手请教关于编写一个wordcounter小程序的问题

  Print this page

1.【求助】新手请教关于编写一个wordcounter小程序的问题 Copy to clipboard
Posted by: liusmallsea
Posted on: 2005-02-28 18:19

小弟我初学java,最近要编一个小程序,万分郁闷:就是读取一个txt文件,把里面的单词读到一个数组里面,并相应的统计对应单词在文章中的出现频率。
我声明一个string和一个int的数组并用bufferedreader读取txt文档
可是bufferedreader一次只读一行,有哪位大侠知道怎么把文档中的单词不重复的放入那个string的数组中么?并用int统计相应单词的出现次数?
小弟不胜感谢啊。。。

2.Re:【求助】新手请教关于编写一个wordcounter小程序的问题 [Re: liusmallsea] Copy to clipboard
Posted by: 凋谢的玫瑰
Posted on: 2005-02-28 21:53

小弟也是初学JAVA,这有个源程序
不知是否用的上!!
import java.io.*;
import java.util.*;

public class FileRW
{
//需要输入的person数目。
  public static int NUMBER = 3;
  public static void main(String[] args)
  {
    Person[] people = new Person[NUMBER];
//暂时容纳输入数据的临时字符串数组。
    String[] field = new String[4];
//初始化field数组。
    for(int i = 0; i < 4; i++)
    {
      field[i] = "";
    }
//IO操作必须捕获IO异常。
    try
    {
//用于对field数组进行增加控制。
      int fieldcount = 0;

//先使用System.in构造InputStreamReader,再构造BufferedReader。
      BufferedReader stdin =
        new BufferedReader(new InputStreamReader(System.in));
      for(int i = 0; i < NUMBER; i++)
      {
        fieldcount = 0;
        System.out.println("The number " + (i + 1) + " person");
        System.out.println("Enter name,age,salary,married(optional), please separate fields by ':'");
//读取一行。
        String personstr = stdin.readLine();
//设置分隔符。
        StringTokenizer st = new StringTokenizer(personstr,":");
//判断是否还有分隔符可用。    
        while (st.hasMoreTokens())
        {
          field[fieldcount] = st.nextToken();
          fieldcount++;
        }
//如果输入married,则field[3]不为空,调用具有四个参数的Person构造函数。
        if(field[3] != "")
        {
          people[i] = new Person(field[0], Integer.parseInt(field[1]),
            Double.parseDouble(field[2]), field[3]);
//置field[3]为空,以备下次输入使用。
          field[3] = "";
        }
//如果未输入married,则field[3]为空,调用具有三个参数的Person构造函数。
        else
        {
          people[i] = new Person(field[0], Integer.parseInt(field[1]),
            Double.parseDouble(field[2]));
        }
      }

//将输入的数据保存至“people.dat”文本文件中。
      PrintWriter out = new PrintWriter( new BufferedWriter(new
        FileWriter("people.dat")));
      writeData(people, out);
//关闭流。
      out.close();

//从文件“people.dat”读取数据。
      BufferedReader in = new BufferedReader(new
        FileReader("people.dat"));
      Person[] inPeople = readData(in);
//关闭流。
      in.close();

//输出从文件中读入的数据。
      for (int i = 0; i < inPeople.length; i++)
        System.out.println(inPeople[i]);
    }
    catch(IOException exception)
    {
      System.err.println("IOException");
    }
  }

//将所有数据写入输出流。
  static void writeData(Person[] p, PrintWriter out)
    throws IOException
  {
//写入记录条数,即人数。
    out.println(p.length);
    for (int i = 0; i < p.length; i++)
      p[i].writeData(out);
  }

//将所有数据从输入流中读出。
  static Person[] readData(BufferedReader in)
    throws IOException
  {
//获取记录条数,即人数。
    int n = Integer.parseInt(in.readLine());

    Person[] p = new Person[n];
    for (int i = 0; i < n; i++)
    {
      p[i] = new Person();
      p[i].readData(in);
    }
    return p;
  }
}

class Person
{
  private String name;
  private int age;
  private double salary;
  private String married;

  public Person()
  {
  }

  public Person(String n, int a, double s)
  {
    name = n;
    age = a;
    salary = s;
    married = "F";
  }

  public Person(String n, int a, double s, String m)
  {
    name = n;
    age = a;
    salary = s;
    married = m;
  }

  public String getName()
  {
    return name;
  }

  public int getAge()
  {
    return age;
  }

  public double getSalary()
  {
    return salary;
  }

  public String getMarried()
  {
    return married;
  }

//设置输出格式。
  public String toString()
  {
    return getClass().getName() + "[name=" + name
      + ",age=" + age
      + ",salary=" + salary
      + ",married=" + married
      + "]";
  }

//写入一条记录,即一个人的数据到输出流。
  public void writeData(PrintWriter out) throws IOException
  {
//格式化输出。
    out.println(name + ":"
      + age + ":"
      + salary + ":"
      + married);
  }

//从输入流读入一条记录,即一个人的数据。
  public void readData(BufferedReader in) throws IOException
  {
    String s = in.readLine();
    StringTokenizer t = new StringTokenizer(s, ":");
    name = t.nextToken();
    age = Integer.parseInt(t.nextToken());
    salary = Double.parseDouble(t.nextToken());
    married = t.nextToken();
  }
}

3.Re:【求助】新手请教关于编写一个wordcounter小程序的问题 [Re: liusmallsea] Copy to clipboard
Posted by: liusmallsea
Posted on: 2005-03-01 17:57

谢谢楼上的啊。。。可是好像不行啊。。。不是一个功能啊。。。

4.Re:【求助】新手请教关于编写一个wordcounter小程序的问题 [Re: liusmallsea] Copy to clipboard
Posted by: caoyi
Posted on: 2005-03-03 14:35

import java.io.*;
public class testaddsub
{
  public static void main(String[] args)
  {
    try
    {
      int count = 0;
  BufferedReader in = new BufferedReader(new FileReader("test.txt"));
  String str;
  while ((str = in.readLine()) != null)
  {
  for(int i=0;i <str.length();i++)
  {
    if(str.substring(i,str.length()).indexOf("a")>=0)
    {
      count++;
    }
  }
  }
  System.out.println(count);
  in.close();
  }
  catch (IOException e)
  {}
  }
}
不知道你要用数组干什么。
可以经常去http://www.javaalmanac.com/找找看类的用法和例子


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923