问题描述:
1. 问题涉及知识点.
- 程序的停止问题(如本题所述,即不知道什么时候结束,只是说每次打印最后八个,所以还是按照一般处理,在最后打印时只是打印容器中最后把即可.)
- 净文件名:值得就是文件名称.
2. 自己解法.
- 使用
LinkedHashMap
对数据进行存储. - 把
净文件名+" "+行号
作为key进行存储,把对应的错误次数作为value. - 判断是否含有使用
map.containsKey(key)
进行判断,如果含有对value进行+1. - 此题应该除注意的是
HashMap
的输出顺序不一定和输入顺序相同.所以建议使用LinkedHashMap
.
package com.chaoxiong.niuke.huawei;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;
public class HuaWei_19_2 {
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();
// 截取
str = str.substring(str.lastIndexOf("\\")+1);
// 算长度
int len = str.length();
if(len>16)
str = str.substring(len-16);
String key = str+" "+linenum;
if(map.containsKey(key)){
map.put(key,map.get(key)+1);
}else
map.put(key,1);
}
// 打印处理, 如果长度大于8 只打印最后8个.
int mapSize = map.keySet().size();
if(mapSize<=8){
for(String string:map.keySet()){
System.out.println(string+" "+map.get(string));
}
}else {
int flag = 1;
for(String string:map.keySet()){
if(flag>mapSize-8){
//打印
System.out.println(string+" "+map.get(string));
}
flag += 1;
}
}
}
}
3. 优质答案.
null
4. 本题总结.
再含有键值对的数据处理的时候 map 的优势就很清晰的体现出来.
如果需要保证输入顺序和输出顺序相同需要使用LinkedHashMap
.