描述 |
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。 处理: 1、 记录最多8条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条,错误计数增加; 2、 超过16个字符的文件名称,只记录文件的最后有效16个字符; 3、 输入的文件可能带路径,记录文件名称不能带路径。 |
---|---|
知识点 | 字符串 |
运行时间限制 | 0M |
内存限制 | 0 |
输入 |
一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。 如:E:V1R2productfpgadrive.c 1325 |
输出 |
将所有的记录统计并将结果输出,格式:文件名 代码行数 数目,一个空格隔开,如: fpgadrive.c 1325 1 |
样例输入 | E:V1R2productfpgadrive.c 1325 |
样例输出 | fpgadrive.c 1325 1 |
package com.oj; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Scanner; public class TestOj { private static String findError(String str){ String[] data = str.split("\\"); String[] use = data[data.length-1].split(" "); String last = data[data.length-1]; StringBuilder sb = new StringBuilder(); boolean flag = false; for(int i = 0;i < last.length(); i++){ if(last.charAt(i)==' '){ flag = true; continue; } if(flag) sb.append(last.charAt(i)); } //System.out.println("hehe "+sb.toString()); String fileName = use[0].length()>16 ? use[0].substring(use[0].length()-16, use[0].length()):use[0]; String key = fileName+" "+sb.toString(); return key; } public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); Scanner in = new Scanner(System.in); Map<String,Integer> errorMap = new HashMap<String,Integer>(); while(in.hasNext()){ String input = in.nextLine(); String key = findError(input); if(errorMap.containsKey(key)){ String tempvalue = String.valueOf(errorMap.get(key)); errorMap.put(key, errorMap.get(key)+1); String temp = key+" "+tempvalue; int pos = list.indexOf(temp); list.set(pos, key+" "+String.valueOf(errorMap.get(key))); }else{ if(list.size()==8) list.remove(0); errorMap.put(key, 1); String temp = key+" 1"; list.add(temp); } } for(String show:list){ System.out.println(show); } } }