思路
这道题的描述让人很摸不着头脑。
其实就是把输入的东西进行一个计数操作,而且输出的时候只输出最新的8条数据。
计数器这种东西一般生产环境都喜欢用redis一类的组件,其实就是一个key-value结构的数据存储。因此我们用Java求解的时候只需要用到Map就可以了。
这里还有一个问题就是只要最新的8条记录,借助一个栈或者队列其实都能够实现。
代码
import java.sql.Statement;
import java.util.*;
public class Main {
public static void main(String[] arg) {
Scanner scanner = new Scanner(System.in);
Stack<String> stack = new Stack<>();
Map<String, Integer> map = new HashMap<>();
while (scanner.hasNext()) {
String line = scanner.nextLine();
// 第一次分解按照分隔符
String[] arr1 = line.split("\\\\");
// 拿到最后一个元素,大致这样 ssss 123
String lastString = arr1[arr1.length - 1];
String[] tempArr = lastString.split(" ");
// 文件名
String fileName = tempArr[0];
// 行号
String lineNo = tempArr[1];
// 大于16的,要16个字符以后
String regFileName = fileName.length() > 16 ? fileName.substring(fileName.length() - 16) : fileName;
String key = regFileName + " " + lineNo;
if (stack.contains(key)) {
map.put(key, map.get(key) + 1);
} else {
stack.push(key);
map.put(key, 1);
}
}
Stack<String> stack1 = new Stack<>();
int i = 0;
while (!stack.isEmpty()) {
if (i == 8) {
break;
}
stack1.push(stack.peek() + " " + map.get(stack.pop()));
i++;
}
while (!stack1.isEmpty()) {
System.out.println(stack1.pop());
}
}
} 
京公网安备 11010502036488号