题目描述:
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。
处理:
1、 记录最多8条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条,错误计数增加;
2、 超过16个字符的文件名称,只记录文件的最后有效16个字符;
3、 输入的文件可能带路径,记录文件名称不能带路径。
Java实现:
import java.util.*; /*带路径文件名称按“\”分隔,最后一部分是文件名 *文件名字符串长度若大于16,则截取后16位 *需要判断是否重复以及是否循环记录(这里没有循环使用空间,而是都存储然后取出后8个) */ public class Main{ public static void main(String[] args) { Scanner sc=new Scanner(System.in); Map<String, Integer> map=new LinkedHashMap<String, Integer>(); while(sc.hasNext()){ String str=sc.next(); int linenum=sc.nextInt(); String[] arr=str.split("\\\\"); //根据\切割 String s=arr[arr.length-1]; if(s.length()>16) //截取 s=s.substring(s.length()-16); String key=s+" "+linenum; int value=1; if(map.containsKey(key)) map.put(key, map.get(key)+1); else { map.put(key, value); } } int count=0; for(String string:map.keySet()){ count++; if(count>(map.keySet().size()-8)) //输出最后八个记录 System.out.println(string+" "+map.get(string)); } } }
知识点:
- \\\\被java转换成\\,\\又被正则表达式转换成\,所以将字符串用\分隔时,正则表达式为\\\\
- 本代码中使用LinkedHashMap记录所有的错误,但只取出最后8个,感觉会造成空间浪费