比如说c:/read.txt
read.txt中全部是英文单词,里面有空格,逗号,分号等等如何实现呢?

解决方案 »

  1.   

    用Map<K, W>来做,这个是最简单的思路了。
      

  2.   

    这个就比较麻烦了。
    你得对文件的每行进行分析。
    还要记录下出现的单词,可以用map保存,key就是单词,value就是个数。
      

  3.   

    接楼上
    创建一个map,如HashMap map = new HashMap();
    循环遍历此txt文本一遍,读到一个单词时,就到map里查一下(用containsKey方法)。
    若map里没有这个单词就把这个单词(如:word)放到map里map.put("word",1);以单词为key,出现次数为value
    因为这个map里key不会重复的。
    若map里有这个单词,把对应的value+1就行了。
    这样子需要循环一次就搞定。而map的containsKey方法的时间复杂度为O(1)。
    应该来说总体的效率还可以。
      

  4.   

    文件要是很小的话,直接读进来当成一个大的字符串,那就很好办了,分割出各个单词的方法也很多。
    文件很大的话就FileReader(或类似)一个字符一个字符读,读到空格就说明读完了一个单词。
    英文中一个单词被分成两行的话都是用 “-” 来连接的所以不会有什么影响
      

  5.   


    import java.util.*;
    import java.util.regex.*;
    import java.io.*;
    public class UserTreeMap...{public static void main(String args[]) throws IOException...{
      
      BufferedReader buf=new BufferedReader(new FileReader("english.txt"));
      System.out.println("Read under this dir English.txt");
      StringBuffer sbuf=new StringBuffer();//缓冲字符串
      String line=null;
      while((line=buf.readLine())!=null)...{
      sbuf.append(line);//追加到缓冲字符串中
      }
      buf.close();//读取结束
      Pattern expression=Pattern.compile("[a-zA-Z]+");//定义正则表达式匹配单词
      String string1=sbuf.toString().toLowerCase();//转换成小写
      Matcher matcher=expression.matcher(string1);定义string1的匹配器
      TreeMap myTreeMap=new TreeMap();//创建树映射 存放键/值对
      int n=0;//文章中单词总数
      Object word=null;//文章中的单词
      Object num=null;//出现的次数
      while(matcher.find())...{//是否匹配单词
      word=matcher.group();//得到一个单词-树映射的键
      n++;//单词数加1
      if(myTreeMap.containsKey(word))...{//如果包含该键,单词出现过
        num=myTreeMap.get(word);//得到单词出现的次数
        Integer count=(Integer)num;//强制转化
        myTreeMap.put(word,new Integer(count.intValue()+1));
      }
      else
      {
        myTreeMap.put(word,new Integer(1));//否则单词第一次出现,添加到映射中
      }
      }
      System.out.println("统计分析如下:");
      System.out.println(""t 文章中单词总数"+n+"个");
      System.out.println("具体的信息在当前目录的result.txt文件中");
      BufferedWriter bufw=new BufferedWriter(new FileWriter("result.txt"));
      Iterator iter=myTreeMap.keySet().iterator();//得到树映射键集合的迭代器
      Object key=null;
      while(iter.hasNext())...{//使用迭代器遍历树映射的键
      key=iter.next();
      bufw.write((String)key+":"+myTreeMap.get(key));//键/值写到文件中
      bufw.newLine();
      }
      bufw.write("english.txt中的单词总数"+n+"个");
      bufw.newLine();
      bufw.write("english.txt中不同单词"+myTreeMap.size()+"个");
      bufw.close();
    }
    }  
    you can try it
      

  6.   

    流浪小猫小猫的方法是可以的。但是我这里提醒你的是一定要注意分割的方式。
    split是支持正则表达式的。
      

  7.   


    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */package test1;/**
     *
     * @author Administrator
     */
    import java.util.*;
    import java.util.regex.*;
    import java.io.*;
    public class UserTreeMap{public static void main(String args[]) throws IOException{
      
      BufferedReader buf=new BufferedReader(new FileReader("d:/read.txt"));
      System.out.println("Read under this dir read.txt");
      StringBuffer sbuf=new StringBuffer();//缓冲字符串
      String line=null;
      while((line=buf.readLine())!=null){
      sbuf.append(line);//追加到缓冲字符串中
      }
      buf.close();//读取结束
      Pattern expression=Pattern.compile("[a-zA-Z]+");//定义正则表达式匹配单词
      String string1=sbuf.toString().toLowerCase();//转换成小写
      Matcher matcher=expression.matcher(string1);//定义string1的匹配器
      TreeMap myTreeMap=new TreeMap();//创建树映射 存放键/值对
      int n=0;//文章中单词总数
      Object word=null;//文章中的单词
      Object num=null;//出现的次数
      while(matcher.find()){//是否匹配单词
      word=matcher.group();//得到一个单词-树映射的键
      n++;//单词数加1
      if(myTreeMap.containsKey(word)){//如果包含该键,单词出现过
        num=myTreeMap.get(word);//得到单词出现的次数
        Integer count=(Integer)num;//强制转化
        myTreeMap.put(word,new Integer(count.intValue()+1));
      }
      else
      {
        myTreeMap.put(word,new Integer(1));//否则单词第一次出现,添加到映射中
      }
      }
      System.out.println("统计分析如下:");
      System.out.println("文章中单词总数"+n+"个");
      System.out.println("具体的信息在当前目录的result.txt文件中");
      BufferedWriter bufw=new BufferedWriter(new FileWriter("d:/result.txt"));
      Iterator iter=myTreeMap.keySet().iterator();//得到树映射键集合的迭代器
      Object key=null;
      while(iter.hasNext()){//使用迭代器遍历树映射的键
      key=iter.next();
      bufw.write((String)key+":"+myTreeMap.get(key));//键/值写到文件中
      bufw.newLine();
      }
      bufw.write("read.txt中的单词总数"+n+"个");
      bufw.newLine();
      bufw.write("read.txt中不同单词"+myTreeMap.size()+"个");
      bufw.close();
    }

    我try过了,还可以,你再try try