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

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);
  } 
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值