字符串联想匹配算法之字符串数据补全
/**
* 不考虑字母在中间的情况
* 1 字符串匹配算法,匹配相同的字符 匹配成功返回true,打上key的标记
* 2 输入多个字符串的时候 根据空格字符(\u0020)分割,走单个匹配规则
* 3 组织联想字符串
* 考虑算法 暴力匹配
* 根据用户输入字符串长度,直接截取匹配对应数组字符串的值,相同则匹配通过,数组字段不满足条件时,直接跳过
*/
public static void associateStr(String inputContent){
String [] arrs = inputContent.split("\u0020");
int arrsLen = arrs.length; //数组长度
Map<String,Integer> resultStr = new HashMap<String,Integer>();
for(String msg : arrs){
int len = msg.length();
//取出所有key
Set<String> keys=collegeData.keySet();
//根据key获取里面的value
for(String key : keys){
List<String> values = collegeData.get(key);
int keyShowNums = 1;
boolean flag = false; //是否第一次匹配标记
for(String val : values){
if(val.length()<len){
continue;
}else{
val = val.substring(0, len);
if(val.equals(msg)){
if(arrsLen==1){
resultStr.put(key,keyShowNums++);
break; //结束当前循环
}else{
if(flag){
resultStr.replace(key, keyShowNums-1, keyShowNums);
}else{
resultStr.put(key,keyShowNums++);
}
}
flag = true;
}
}
}
}
}
//统计出现的次数优先返回输出次数多的
if(arrsLen==1){
System.out.println("提示内容"+resultStr.keySet());
}else{
//输出map集合里次数最高大的,不考虑次数重复的情况
Map<String, Integer> sortMap = sortMap(resultStr);
Set<String> keys=sortMap.keySet();
for(String key :keys){
System.out.println("提示内容"+key);
return;
}
}
}