| 描述 |
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。 处理: 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);
}
}
}