简单错误记录

开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。 
处理:
1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加;(文件所在的目录不同,文件名和行号相同也要合并)
2.超过16个字符的文件名称,只记录文件的最后有效16个字符;(如果文件名不同,而只是文件名的后16个字符和行号相同,也不要合并)
3.输入的文件可能带路径,记录文件名称不能带路径
 

输入描述:

一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。

    文件路径为windows格式

    如:E:\V1R2\product\fpgadrive.c 1325


 

输出描述:

将所有的记录统计并将结果输出,格式:文件名代码行数数目,一个空格隔开,如: fpgadrive.c 1325 1 

    结果根据数目从多到少排序,数目相同的情况下,按照输入第一次出现顺序排序。

    如果超过8条记录,则只输出前8条记录.

    如果文件名的长度超过16个字符,则只输出后16个字符

输入例子1:

E:\V1R2\product\fpgadrive.c 1325

输出例子1:

fpgadrive.c 1325 1

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;


public class Path {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan = new Scanner(System.in);
        List<String> list=new ArrayList<String>();
        Map<String,Integer> map=new LinkedHashMap<String,Integer>();
        while(scan.hasNext()){
        String filename=scan.next();
        
        int line=scan.nextInt();
        String [] name=filename.split("\\\\");
        //System.out.println(name[3]); 
        String myname=name[name.length-1];
        String ming=myname+" "+line;
        
        
        if(map.containsKey(ming)){
            map.put(ming, map.get(ming)+1);
        }
        else {
            map.put(ming, 1);    
            list.add(myname);
        }
        }
        scan.close();
        /*for(Entry<String, Integer> vo : map.entrySet()){
               vo.getKey();
               vo.getValue();
               System.out.println(vo.getKey()+"  "+vo.getValue());
              }*/
         List<Map.Entry<String,Integer>> mylist = new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
         Collections.sort(mylist,new Comparator<Map.Entry<String,Integer>>() {
                //升序排序
                public int compare(Entry<String, Integer> arg1,
                        Entry<String, Integer> arg2) {
                    return (arg2.getValue()-arg1.getValue())==0?(arg1.getValue()-arg2.getValue()):(arg2.getValue()-arg1.getValue());
                }

            });
         int count=0;
         for(Map.Entry<String,Integer> mapping:mylist){ 
             //System.out.println(mapping.getKey()+":"+mapping.getValue()); 
             String wname;
             if(count>7) break;
             if(list.get(count).length()>16){
                int zi= list.get(count).length()-16;
                wname=mapping.getKey().substring(zi)+" "+mapping.getValue();
             }
             else wname=mapping.getKey()+" "+mapping.getValue();
             System.out.println(wname); 
             count++;
        } 
        
        
    }

}
 

猜你喜欢

转载自blog.csdn.net/boguesfei/article/details/81349312