開發一個簡單錯誤記錄功能小模塊,能夠記錄出錯的代碼所在的文件名稱和行號。[面試題]

處理:

1、 記錄最多8條錯誤記錄,循環記錄,對相同的錯誤記錄(淨文件名稱和行號完全匹配)只記錄一條,錯誤計數增加;

2、 超過16個字符的文件名稱,只記錄文件的最後有效16個字符;

3、 輸入的文件可能帶路徑,記錄文件名稱不能帶路徑。

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;

public class Demo01 {
    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.split("\\\\")的含義,就是字符串以”\"分割得到,字符串數組
            //首先a中第一個和第三個\作爲轉義符號,因此上面代碼中split方法的實際參數就是"\\"。
            //而split方法是以正則表達式,進行匹配分割的。
            //在正則中.$|()[{^?*+\\ 是特殊字符,同樣的\也是轉義符號
            //因此a中第一第三個\是java轉義符,第二個\是正則表達式轉義符,第四個\是真正意義上的字符”\"

            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);
            }
            //}將while循環的第二個括號放在這裏是  輸入時無法結束循環  一直等待輸入
            int count = 0;
            for (String string : map.keySet()) {
                count++;
                if (count > map.keySet().size() - 8) {
                    System.out.println(string + " " + map.get(string));
                }
            }
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章