一道题做了一半觉得很不容易没想到另一半更难。。再看下一道更变态……高手们帮帮忙……
1.通过使用Map<String,Integer>,创建一个程序,它可以对一个文件中出现的单词计数。使用带有第二个参数String.CASE_INSENSITIVE_ORDER的Collections.sort()方法对结果进行排序,然后显示结果。
2.修改题目1,使其用一个包含有一个String域和一个计数域的类来存储每一个不同的单词,并使用一个由这些对象构成的Set来维护单词列表。---------------------
第一道题做了一半,到Collections.sort()方法排序那做不下去了,程序如下://: main/Main.java
package main;
import mypackage.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
Word w=new Word();
FileReader f=new FileReader("E:/Marriage Arranged by an Unborn Baby.txt");
w.run(f);
f.close();
}
}//: mypackage/CharToString.java
package mypackage;
public class CharToString {
public static String[] run(char[] c) {
StringBuilder result=new StringBuilder();
for(int i=0;i<c.length&&c[i]!=0;i++)
result.append(c[i]);
String[] s=result.toString().split(" ");
return s;
}
}//: mypackage/Word.java
package mypackage;
import java.io.*;
import java.util.*;
public class Word {
private Map<String,Integer> word=new HashMap<String,Integer>();
public void run(FileReader fr) throws IOException {
char[] c=new char[1024];
fr.read(c);
String[] s=CharToString.run(c);
for(int i=0;i<s.length;i++) {
Integer j=word.get(s[i]);
word.put(s[i],j==null?1:j+1);
}
System.out.println(word);
}
}

解决方案 »

  1.   

    单词计数 的话,用 space , "," , "." 进行分词,然后遍历之前添加的并计数
      

  2.   

    1.排序那个比较简单吧,Comparable接口都给你了,排序的话,就自己写一个冒泡的排序,只是在比较的时候使用String.CASE_INSENSITIVE_ORDER来比较大小就对了;
    2.其实他题目有点吓人,说白了就是,你自己写一个Class,里面两个属性,一个是String的单词,一个是int的统计单词个数,用这些来实现第一题的统计,这样的话,你这个类应该重载equals方法,用单词是否相等来判断是否相等;然后你自己写一个类来实现Set接口,注意了,这里在写put方法的时候,判断对象是否已经添加过,如果相等就把该对象的单词统计加1,否则就加一个新的;
    3.这会再写一个main来读取数据,往自己写的set中put就行了
      

  3.   

    sorry,刚才写错了,Set只有add方法,没有put
      

  4.   


    你应该刚学JAVA吧。
    看了你写的代码,我认为你现在的基本功还不足以写出这个题目的代码。
    你现在的任务应该是再加强基本功而不是在这种题目上较劲。等你有了足够的基本功,写这些代码易如反掌。我的确可以在比写这些文字长不了多少的时间内给你写出代码,但写了又有什么用呢。不如给点更有用的建议。
      

  5.   


    第一题参考代码://: mypackage/Word.java
    //这是第一题
    package mypackage;
    import java.io.*;
    import java.util.*;
    public class Word {
    //使用TreeMap,用于维护多小到大的顺序
        private Map<String,Integer> word=new TreeMap<String,Integer>(
         new Comparator<String>()
         {
         public int compare(String o1, String o2) {
    return o1.compareToIgnoreCase(o2);

         }
           );
        
        /*
         * 功能:对单词进行频度统计,并按单词从小大维护这个单词间的顺序   
        */
        public void run(FileReader fr) throws IOException {
            BufferedReader br=new BufferedReader(fr);
            String line=null;
            while((line=br.readLine())!=null)
            {
             String[] ss=line.split("\\s+");
             for(String e:ss)
             {
             if(e.trim().length()!=0)
             {
                 Integer j=word.get(e);
                         word.put(e,j==null?1:j+1);
             }//if
             }//for
            }//while
        
            System.out.println(word);
        }
    }//: main/Main.java
    package main;
    import mypackage.*;
    import java.io.*;
    public class Main {
        public static void main(String[] args) throws IOException {
         //第一题
            Word w=new Word();
            FileReader f=new FileReader("E:/t1.txt");
            w.run(f);
            f.close();
           
            
        }
    }E:/t1.txt文件内容:
    Marriage Arranged by an Unborn Baby
    this is a test
    hello   anyboy
    hello   anyboy程序运行结果:
    {a=1, an=1, anyboy=2, Arranged=1, Baby=1, by=1, hello=2, is=1, Marriage=1, test=1, this=1, Unborn=1}
    第二题参考代码://: mypackage/Count.java
    //这是第二题
    package mypackage;
    import java.io.*;
    import java.util.*;
    //这是自定义的那个类
    public class Count {
     private String word;//单词
     private int cc;//个数
     
     public Count(String s,int c){word=s;cc=c;}
     
     public String getWord(){return word;} 
     public void add(){cc++;}//频度加1
     
    /* (non-Javadoc)
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object obj) {
    // TODO Auto-generated method stub

    return word.equals(((Count)obj).word);
    }
    /* (non-Javadoc)
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
    // TODO Auto-generated method stub
    return word.hashCode();
    }
    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
    // TODO Auto-generated method stub
    return "("+word+","+cc+") ";
    }
     
    }//class//第二题:单词的SET
    package mypackage;
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.*;
    public class WordSet {
    // 单词的set,维护从小到大的次序
     private static Set<Count> set=new TreeSet<Count>(
     new Comparator<Count>(){
    public int compare(Count o1, Count o2) {
    return o1.getWord().compareToIgnoreCase(o2.getWord());
    }  
     });
     public static void put(Count count)
     {
     if(!set.contains(count)){ set.add(count);return ;}
     
     Iterator<Count> it=set.iterator();
     while(it.hasNext())
     {
     Count cc=it.next();
     if(cc.equals(count)) {
     cc.add();//频度加1
     return;
     }
     }

     }
     public static void print()
     {
     for(Count e:set)
     {
     System.out.print(e);
     }
     }
     public static void run(FileReader fr) throws IOException {
         BufferedReader br=new BufferedReader(fr);
         String line=null;
         while((line=br.readLine())!=null)
         {
          String[] ss=line.split("\\s+");
          for(String e:ss)
          {
          if(e.trim().length()!=0)
          {
             put(new Count(e,1));//加入SET中
          }//if
          }//for
         }//while
     
         print();//打印结果
     }
    }//第二题
    package main;
    import mypackage.*;import java.io.*;
    public class Main2 { public static void main(String[] args) throws Exception{
    // TODO Auto-generated method stub
           //第二题        
            FileReader f=new FileReader("E:/t1.txt");
            WordSet.run(f);
            f.close();
    }}E:/t1.txt文件内容:
    Marriage Arranged by an Unborn Baby
    this is a test
    hello   anyboy
    hello   anyboy程序运行结果:
    (a,1) (an,1) (anyboy,2) (Arranged,1) (Baby,1) (by,1) (hello,2) (is,1) (Marriage,1) (test,1) (this,1) (Unborn,1) 
      

  6.   

    学习一下---------------------
    http://www.51sooho.cn