您的位置:首页 > 编程语言 > Java开发

一次作业题目-----话单计费(Java)

2006-01-16 19:43 387 查看
import java.io.*;
import java.util.*;

class User{
private String username;
private String acctstatustype;
private String acctsessiontime;


void setUname(String s){username=s;}
void setAtype(String s){acctstatustype=s;}
void setAtime(String s){acctsessiontime=s;}

}

public class Assign{
public static void main(String[] args){

int count=0;
String s="D://asc//detail.txt";
String s2="";
String[] s3;
String date,name,value,type,stime,ino,outo; //存储detail.txt中的每条记录
String subname; //subname存储用户列表中的名字,
//int totaltime; //totaltime存储每个用户的总时长
ArrayList list=new ArrayList();
TreeMap map=new TreeMap();
TreeMap map2=new TreeMap();
TreeSet set=new TreeSet(); //存储用户名


File detail=new File(s);



try{
PrintWriter pw=new PrintWriter(new FileWriter("a.txt")); //so here
BufferedReader br=new BufferedReader(new FileReader(detail));

while((s2=br.readLine())!=null)
{
if(s2.equals("")==false) //当没(一整行)遇到""时,即是一个"单元"时
{
StringTokenizer st=new StringTokenizer(s2,"=");
if(st.countTokens()<2) //不是名/值对形式时跳过,忘了第一行日期不是名/值对,同样要加入单元里
map.put("date",s2);//continue;
else
{
name=st.nextToken().trim();
value=st.nextToken().trim();
map.put(name,value); //把每一行添加到其所属的单元内
if(name.equals("User-Name"))
{
set.add(value); //把每个不同用户的名字加入set,为了后面的统计每个用户准备
//int[] totalcount=new int[set.size()];
}
}
//System.out.println("name is "+name+" value is "+value); //Successful
}
else
{ //遇到了(一个整行是)"",说明一个单元结束,把此单元加入list
//if(map.firstKey()!=null) //防止出现连续两个""时,出现NullPointer错误,如果不判断,在detail.txt结尾就有两个"",那么最后的一个元素是空的TreeMap,从Map中get时出现NullPointer错误)
//注意:用map.firstKey()不能判断map里是否有元素(因为如果map里没有元素,直接抛出异常),而是用Map的size()判断
if(map.size()>0)
{
list.add(map); //往list里面添加单元
map=new TreeMap(); //新建map
}
//else
// break;
}
}

}catch(FileNotFoundException e){e.printStackTrace();}
catch(IOException e){e.printStackTrace();}


Iterator it=list.iterator();
while(it.hasNext())
{
//***一个单元
map=(TreeMap)it.next();
date=(String)map.get("date");
name=(String)map.get("User-Name");
type=(String)map.get("Acct-Status-Type");
stime=(String)map.get("Acct-Session-Time");
ino=(String)map.get("Acct-Input-Octets");
outo=(String)map.get("Acct-Output-Octets");
//***一个单元


if(type!=null) //上面的判断不好用,所以下面这里还要判断一下,待解决!!!!!
{
if(type.equals("Stop")) //accttype为Stop的单元
{
//防止出现连续两个""时,出现NullPointer错误,如果不判断,在detail.txt结尾就有两个"",那么最后的一个元素是空的TreeMap,从Map中get时出现NullPointer错误),不是这个原因
//System.out.println(type); //问题更新,明明能打印出所有的type值,但是一用type.equals()就出错最后两个值出不来,只能加上面的判断
//System.out.println(" "+value.equals("Stop"));
//System.out.println("时间 "+date+"用户 "+name+" 类型 "+type+" 时长 "+stime+" 流入 "+ino+" 流出 "+outo);

System.out.println(name+" "+outo);


/*Iterator it2=set.iterator();
while(it2.hasNext())
{
subname=(String)it2.next();
if(name.equals(subname))//name和其中的一个匹配



//System.out.println((String)it2.next());
}*/
//String[set.size()] s;
//=set.toArray(s);

/*for(int i=0;i<set.size();i++)
{
subname=(String)it2.next();
if(name.equals(subname))
totalcount[i]+=stime;

}*/




}
}
//else
//System.out.println("Hoho");


}


/*测试一下,判断set是否包含了detail.txt中出现的所有用户名,SUC
it=set.iterator();
while(it.hasNext())
{
System.out.println((String)it.next());
}
*/

//System.out.println(count);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐