没有对类型排序,连异常都没有处理,不过适合任何类型声明import java.io.*;
import java.util.*;
class Qiangfen
{
public static void main(String[] args) throws Exception
{
File f=new File("f.txt");
BufferedReader br=new BufferedReader(new FileReader(f));
String entry=null;
//这里应该使用List的,但是我使用HashMap获得更好的效率
Map map=new HashMap();
while((entry=br.readLine())!=null){
//String[] temp=entry.split(' ');
//我觉得StringTokenizer 比 split效率高一些,这里也可以用split
StringTokenizer st=new StringTokenizer(entry," ;");
String var=st.nextToken().trim();
String type=st.nextToken().trim();
Entry e=new Entry(type,var);
if(map.containsValue(e)){
Entry en=(Entry)map.get(e);
en.vars.add(var);
}
else{
map.put(e,e);
}
}
br.close();
BufferedWriter bw=new BufferedWriter(new FileWriter("new.txt"));
for(Iterator i=map.keySet().iterator();i.hasNext();){
bw.write(i.next().toString());
bw.newLine();
}
bw.close(); }
static class Entry
{
Entry(String type,String var){
this.type=type;
vars.add(var);
}
String type;
List vars=new ArrayList();
public boolean equals(Object o){
return ((Entry)o).type.equals(type);
}
public String toString(){
StringBuffer sb=new StringBuffer(type);
sb.append(' ');
for(int i=0;i<vars.size();i++){
sb.append((String)vars.get(i));
sb.append(',');
}
sb.setCharAt(sb.length()-1,';');
return sb.toString();
}
public int hashCode(){
return type.hashCode();
}
}; }
import java.util.*;
class Qiangfen
{
public static void main(String[] args) throws Exception
{
File f=new File("f.txt");
BufferedReader br=new BufferedReader(new FileReader(f));
String entry=null;
//这里应该使用List的,但是我使用HashMap获得更好的效率
Map map=new HashMap();
while((entry=br.readLine())!=null){
//String[] temp=entry.split(' ');
//我觉得StringTokenizer 比 split效率高一些,这里也可以用split
StringTokenizer st=new StringTokenizer(entry," ;");
String var=st.nextToken().trim();
String type=st.nextToken().trim();
Entry e=new Entry(type,var);
if(map.containsValue(e)){
Entry en=(Entry)map.get(e);
en.vars.add(var);
}
else{
map.put(e,e);
}
}
br.close();
BufferedWriter bw=new BufferedWriter(new FileWriter("new.txt"));
for(Iterator i=map.keySet().iterator();i.hasNext();){
bw.write(i.next().toString());
bw.newLine();
}
bw.close(); }
static class Entry
{
Entry(String type,String var){
this.type=type;
vars.add(var);
}
String type;
List vars=new ArrayList();
public boolean equals(Object o){
return ((Entry)o).type.equals(type);
}
public String toString(){
StringBuffer sb=new StringBuffer(type);
sb.append(' ');
for(int i=0;i<vars.size();i++){
sb.append((String)vars.get(i));
sb.append(',');
}
sb.setCharAt(sb.length()-1,';');
return sb.toString();
}
public int hashCode(){
return type.hashCode();
}
}; }
解决方案 »
- 请教个新手问题,关于System.out.print("\t")的
- Java 库中有没有可用的Tree类?(纯数据的),最好有深度优先的遍历方法?
- 获得jpg图片宽度与长度的算法?
- 为小弟指航向!
- 高分提问:大虾们帮个忙:怎么在JCreator3 le版本里输入汉字 ??谢谢
- 怎么让后来设定的label放到原来label的上面一层?
- 求助:关于Eclipse
- 求推荐java并发书籍
- 请问String[] args和String args[]有什么区别啊????
- 用JavaMail收到的邮件,有什么方法能知道主题及内容的编码方式呢?
- 我是新手,请大家帮我看一段程序,这有问题吗?
- 请教关于qq的数据包绑定IP的问题?请高手指点一二!
而且用List的话Entry就不需要重写hashCode方法了!import java.io.*;
import java.util.*;
class Qiangfen
{
public static void main(String[] args) throws Exception
{
File f=new File("f.txt");
BufferedReader br=new BufferedReader(new FileReader(f));
String entry=null;
//这里应该使用List的,但是我使用HashMap获得更好的效率
//这里用List效率不高
List list=new ArrayList();
//Map map=new HashMap();
while((entry=br.readLine())!=null){
//String[] temp=entry.split(' ');
//我觉得StringTokenizer 比 split效率高一些,这里也可以用split
StringTokenizer st=new StringTokenizer(entry," ;");
String var=st.nextToken().trim();
String type=st.nextToken().trim();
Entry e=new Entry(type,var);
int i=list.indexOf(e);
if(i!=-1){
Entry en=(Entry)list.get(i);
en.vars.add(var);
}
else{
list.add(e);
}
}
br.close();
BufferedWriter bw=new BufferedWriter(new FileWriter("new.txt"));
//for(Iterator i=map.keySet().iterator();i.hasNext();){
// bw.write(i.next().toString());
// bw.newLine();
//}
for(int i=0;i<list.size();i++){
bw.write(list.get(i).toString());
bw.newLine();
}
bw.close(); }
static class Entry
{
Entry(String type,String var){
this.type=type;
vars.add(var);
}
String type;
List vars=new ArrayList();
public boolean equals(Object o){
return ((Entry)o).type.equals(type);
}
public String toString(){
StringBuffer sb=new StringBuffer(type);
sb.append(' ');
for(int i=0;i<vars.size();i++){
sb.append((String)vars.get(i));
sb.append(',');
}
sb.setCharAt(sb.length()-1,';');
return sb.toString();
}
public int hashCode(){
return type.hashCode();
}
}; }
^_^