【华为机试020】简单错误记录

题目描述:

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

 

处理: 

 

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个,感觉会造成空间浪费

猜你喜欢

转载自blog.csdn.net/heyiamcoming/article/details/80414963