处理:
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));
}
}
}
}
}