思路
这道题的描述让人很摸不着头脑。
其实就是把输入的东西进行一个计数操作,而且输出的时候只输出最新的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()); } } }