华为校园招聘2016上机笔试题2

开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。 

处理:
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

输出

fpgadrive.c 1325 1

 1 import java.util.*;
 2 public class Main{
 3 private static int id = 0;
 4     public static void main(String[] args){
 5         Scanner scaner = new Scanner(System.in);
 6         List<ErrorInfo> errors = new ArrayList();
 7         while(scaner.hasNext()){
 8             String line = scaner.nextLine();
 9             String[] lineStrs =  line.split(" ");
10             String  fileName = getFileName(lineStrs[0]);
11             ErrorInfo error = createError(fileName, Integer.parseInt(lineStrs[1]));
12             add(errors,error);
13         }
14         Collections.sort(errors);
15          List<ErrorInfo> errorInfos;
16         if (errors.size() > 8){
17              errorInfos = errors.subList(0, 8);
18         } else {
19              errorInfos = errors;
20         }
21         for (int i = 0;i < 8;i++) {
22             System.out.println(errors.get(i).toString());
23         }
24           
25     }
26  
27     private static String getFileName(String str){
28         return str.substring(str.lastIndexOf("\\")+1);
29     }
30  
31     private static ErrorInfo createError(String fileName,int lineNum){
32         if (fileName.length() > 16){
33             return new ErrorInfo(id++,fileName,fileName.substring(fileName.length()-16,fileName.length()),lineNum,1);
34         }
35         return new ErrorInfo(id++,fileName,fileName,lineNum,1);
36     }
37  
38     private static void add(List<ErrorInfo> errors,ErrorInfo errorInfo){
39         for (ErrorInfo error :errors) {
40             if (error.equals(errorInfo)){
41                 error.count ++;
42                 return;
43             }
44         }
45         errors.add(errorInfo);
46     }
47  
48     private static class ErrorInfo implements  Comparable<ErrorInfo>{
49         private int id;
50         private String fileName;
51         private String fileSubName;
52         private int lineNum;
53         private int count;
54         public ErrorInfo(int id,String fileName,String fileSubName,int lineNum,int count){
55             this.id = id;
56             this.fileName = fileName;
57             this.fileSubName = fileSubName;
58             this.lineNum = lineNum;
59             this.count = count;
60         }
61  
62         public boolean equals(Object obj){
63             if( obj != null && obj instanceof ErrorInfo){
64                 ErrorInfo other = (ErrorInfo)obj;
65                 if(other.fileName.equals(this.fileName)
66                         && lineNum == other.lineNum){
67                     return true;
68                 }
69             }
70             return false;
71         }
72  
73         @Override
74         public String toString() {
75             return String.format("%s %s %s",fileSubName,lineNum,count);
76         }
77  
78         public int compareTo(ErrorInfo o) {
79             if (count > o.count){
80                 return -1;
81             }else if (count == o.count){
82                 return id - o.id;
83             }else {
84                 return 1;
85             }
86         }
87     }
88 }

 

posted @ 2020-03-26 22:07  Daemon12  阅读(195)  评论(0)    收藏  举报