一、题目
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。
处理:
1、 记录最多8条错误记录,循环记录,最后只用输出最后出现的八条错误记录。对相同的错误记录只记录一条,但是错误计数增加。最后一个斜杠后面的带后缀名的部分(保留最后16位)和行号完全匹配的记录才做算是”相同“的错误记录。
2、 超过16个字符的文件名称,只记录文件的最后有效16个字符;
3、 输入的文件可能带路径,记录文件名称不能带路径。
4、循环记录时,只以第一次出现的顺序为准,后面重复的不会更新它的出现时间,仍以第一次为准;
二、题解
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
Map<String,Integer> map = new LinkedHashMap();
String string;
while(scanner.hasNext()){
String str = scanner.next();
int nb = scanner.nextInt();
String[] strs = str.split("\\\\");
if(strs[strs.length-1].length()>16){
string = strs[strs.length-1].substring(strs[strs.length-1].length()-16)+" "+nb;
}else{
string = strs[strs.length-1]+" "+nb;
}
if(map.containsKey(string)){
map.put(string,map.get(string)+1);
}else{
map.put(string,1);
}
}
Set<Map.Entry<String,Integer>> set = map.entrySet();
int count = 0;
for(Map.Entry<String,Integer> s:set){
count++;
if(count>map.size()-8){
System.out.println(s.getKey()+" "+s.getValue());
}
}
}
}
三、答案分析
1、题目要求按照顺序进行输出,所以使用LinkedHashMap存储数据,这样可以保证输出顺序;
2、题目要求值输出8条记录,所以随后使用count来筛选输出条件,很方便;