天天看點

簡單錯誤記錄[Java]題目描述解題思路代碼如下

文章目錄

  • 題目描述
  • 解題思路
  • 代碼如下

題目描述

開發一個簡單錯誤記錄功能小子產品,能夠記錄出錯的代碼所在的檔案名稱和行号。

處理:

1、 記錄最多8條錯誤記錄,循環記錄,最後隻用輸出最後出現的八條錯誤記錄。對相同的錯誤記錄隻記錄一條,但是錯誤計數增加。最後一個斜杠後面的帶字尾名的部分(保留最後16位)和行号完全比對的記錄才做算是”相同“的錯誤記錄。

2、 超過16個字元的檔案名稱,隻記錄檔案的最後有效16個字元; 3、 輸入的檔案可能帶路徑,記錄檔案名稱不能帶路徑。

4、循環記錄時,隻以第一次出現的順序為準,後面重複的不會更新它的出現時間,仍以第一次為準

輸入描述

每組隻包含一個測試用例。一個測試用例包含一行或多行字元串。每行包括帶路徑檔案名稱,行号,以空格隔開。

輸出描述

将所有的記錄統計并将結果輸出,格式:檔案名 代碼行數 數目,一個空格隔開,如:

示例

輸入

D:\zwtymj\xccb\ljj\cqzlyaszjvlsjmkwoqijggmybr 645

E:\je\rzuwnjvnuz 633

C:\km\tgjwpb\gy\atl 637

F:\weioj\hadd\connsh\rwyfvzsopsuiqjnr 647

E:\ns\mfwj\wqkoki\eez 648

D:\cfmwafhhgeyawnool 649

E:\czt\opwip\osnll\c 637

G:\nt\f 633

F:\fop\ywzqaop 631

F:\yay\jc\ywzqaop 631

輸出

rzuwnjvnuz 633 1

atl 637 1

rwyfvzsopsuiqjnr 647 1

eez 648 1

fmwafhhgeyawnool 649 1

c 637 1

f 633 1

ywzqaop 631 2

解題思路

此題出現了重複性出現,計數問題,多組資料,也牽扯了查找問題,我們可以想到利用map來計數,或者直接建立一個數組,利用字元串分離函數,将輸入分解,前一個為路徑,分析它的字尾部分,後一個為行數,不改變,利用map計數,最後将三者拼接存入list,保證循環記錄,隻輸出最後8條記錄

代碼如下

import java.util.*;

public class Main{
    public static Map<String,Integer> map = new HashMap<>();
    public static List<String> list = new ArrayList<>();
    public static void messge(String str){
        String[] ret = str.split(" ");
        int i = 0;
        for(i = ret[0].length()-1;i >= 0;i--){
            if(ret[0].charAt(i) == '\\'){
                i++;
                break;
            }
            if(i == ret[0].length()-16){
                break;
            }
        }
        String tmp = ret[0].substring(i) + " " + ret[1];
        if(map.containsKey(tmp)){
            String s = tmp + " " + map.get(tmp);
            map.put(tmp,map.get(tmp) + 1);

            for(i = 0;i < list.size();i++){
                if(list.get(i).equals(s)){
                    list.set(i,tmp + " " + map.get(tmp));
                }
            }
        }else{
            map.put(tmp,1);
            list.add(tmp + " " + map.get(tmp));
        }
        
    }
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){
            String str = scan.nextLine();
            messge(str);
        }
        if(list.size() < 8){
            for(String ret:list){
                System.out.println(ret);
            }
        }else{
            for(int i = list.size()-8;i < list.size();i++){
                System.out.println(list.get(i));
            }
        }
    }
}