---------研究证明说脏话确实可以提高忍耐力,和降低血压。详情可见,将手放入冰水中忍耐例子(百度||google)
将多个相似的字符串进行聚类,返回一个json
导相似度的包(由于相似度非常重要,没有大神的功力,建议还是选择用我发的)
函数info.debatty java-string-similarityRELEASE com.alibaba fastjson1.2.31
参数说明:
list是你的字符串的集合
simNum是相似度的程度(0-1.0之间)
public static String julei(Listlist,double simNum){ NormalizedLevenshtein l = new NormalizedLevenshtein(); HashSet set_source = new HashSet<>(list); HashSet set_temp =new HashSet<>(list); StringBuffer rs=new StringBuffer(); for(String a1: set_source){ // System.out.println(a1); set_temp.remove(a1); //下一个结束时,判定是否在字符串中,如果在,则直接下一个,不在,则拼接一个尾号; if(rs.indexOf(a1)!=-1){//在字符串中 continue; }else{ //判定最后的字符串之前是不是为!--!,是则不加,否则则添加,前提条件rslength>4 if(rs.length()>4){ if(rs.substring(rs.length() - 4, rs.length()).equals("!--!")){ }else{ rs.append("!--!"); } } } // System.out.println("--------"); for(String b1:set_temp){ System.out.println(b1); //相似度判定 if(l.similarity(a1,b1)>simNum){ //相似度符合,则用符号拼接字符串 rs.append(a1+"=>"+b1); } } } String rs_str=rs.toString(); //去开头 int delStrLength = "!--!".length(); if (rs_str.startsWith("!--!")) { rs_str=rs_str.substring(delStrLength); } //去结尾 if(rs_str.endsWith("!--!")) { rs_str = rs_str.substring(0, rs_str.length() - 4); } // gc垃圾回收 l=null; set_source=null; set_temp=null; JSonArray jsonArray = new JSonArray(); for(String r:rs_str.split("!--!")){ String[] simArr = r.split("=>"); jsonArray.add(simArr); } return jsonArray.toJSonString(); }
结果:
DEMO测试
public static void main(String[] args) {
String arr="hibernate-osgi!--!hibernate5-infinispan!--!hibernate4-core!--!hibernate5-entitymanager!--!hibernate!--!hibernate-infinispan!--!hibernate4-proxool!--!hibernate-hikaricp!--!hibernate5-java8!--!hibernate-envers!--!hibernate5-ehcache!--!hibernate4-ehcache!--!hibernate5-osgi!--!mirrors/hibernate!--!hibernate-core!--!hibernate-c3p0!--!hibernate5-envers!--!hibernate4-infinispan!--!hibernate5-proxool!--!hibernate-entitymanager!--!hibernate4-c3p0!--!hibernate5-parent!--!hibernate5-core!--!hibernate4-testing!--!hibernate/hibernate-orm";
String[] split = arr.split("!--!");
List split_set = (List) Arrays.asList(split);
String julei = julei(split_set,0.5);
System.out.println(julei);
}



