文章目錄
- 題目描述
- 解題思路
- 代碼如下
題目描述
開發一個簡單錯誤記錄功能小子產品,能夠記錄出錯的代碼所在的檔案名稱和行号。
處理:
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));
}
}
}
}