// 一个很大的问题在于遍历删除,直接用forEach遍历删除(注释部分)可能会报错 import java.util.*; public class Main{ public static void main(String[] args) { Scanner in = new Scanner(System.in); LinkedHashMap<String, Integer> map = new LinkedHashMap(); while (in.hasNext()) { String str = in.nextLine(); String[] arr = str.split("\\\\"); String err = arr[arr.length - 1]; if(err.length()>20){ err = err.substring(err.length()-20,err.length()); // 如果长度大于16取后16位 } if (map.containsKey(err)) { int i = map.get(err); map.put(err, i + 1); } else { map.put(err, 1); } } if(map.size()>8){ // for(String key : map.keySet()){ // map.remove(key); // if(map.size()==8){ // break; // } // } List<String> strList = new ArrayList<String>(); int n = 0; for(String key : map.keySet()){ strList.add(key); n++; if(map.size()-n==8){ break; } } for(String key : strList){ map.remove(key); } } for (String str1 : map.keySet()) { System.out.println(str1 + " " + map.get(str1)); } } }