一道题做了一半觉得很不容易没想到另一半更难。。再看下一道更变态……高手们帮帮忙……
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.通过使用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);
}
}
2.其实他题目有点吓人,说白了就是,你自己写一个Class,里面两个属性,一个是String的单词,一个是int的统计单词个数,用这些来实现第一题的统计,这样的话,你这个类应该重载equals方法,用单词是否相等来判断是否相等;然后你自己写一个类来实现Set接口,注意了,这里在写put方法的时候,判断对象是否已经添加过,如果相等就把该对象的单词统计加1,否则就加一个新的;
3.这会再写一个main来读取数据,往自己写的set中put就行了
你应该刚学JAVA吧。
看了你写的代码,我认为你现在的基本功还不足以写出这个题目的代码。
你现在的任务应该是再加强基本功而不是在这种题目上较劲。等你有了足够的基本功,写这些代码易如反掌。我的确可以在比写这些文字长不了多少的时间内给你写出代码,但写了又有什么用呢。不如给点更有用的建议。
第一题参考代码://: 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)
http://www.51sooho.cn