---------研究证明说脏话确实可以提高忍耐力,和降低血压。详情可见,将手放入冰水中忍耐例子(百度||google)
将多个相似的字符串进行聚类,返回一个json
导相似度的包
(由于相似度非常重要,没有大神的功力,建议还是选择用我发的)
<dependency>
<groupId>info.debatty</groupId>
<artifactId>java-string-similarity</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.31</version>
</dependency>
函数
参数说明:
list是你的字符串的集合
simNum是相似度的程度(0-1.0之间)
public static String julei(List<String> list,double simNum){
NormalizedLevenshtein l = new NormalizedLevenshtein();
HashSet<String> set_source = new HashSet<>(list);
HashSet<String> b_source=new HashSet<>(list);
HashSet<String> set_temp =new HashSet<>(list);
ArrayList<String> qu = new ArrayList<>();
StringBuffer rs=new StringBuffer();
for(String a1: set_source){
// System.out.println(a1);
if(qu.contains(a1)){//用于去掉source中的元素,防止下层循环不能清除上层循环,使用什么都不做的方式
continue;
}
//下一个结束时,判定是否在字符串中,如果在,则直接下一个,不在,则拼接一个尾号;
qu.add(a1);
rs.append(a1);
// System.out.println("--------");
for(String b1:b_source){
// System.out.println(b1);
//相似度判定
if(qu.contains(b1)){
continue;
}
if(l.similarity(a1,b1)>simNum){
System.out.println(a1+":"+b1+"=>"+l.similarity(a1,b1));
//相似度符合,则用符号拼接字符串
rs.append("=>"+b1);
qu.add(b1);
}
}
//判定最后的字符串之前是不是为!--!,是则不加,否则则添加,前提条件rslength>4
if(rs.length()>4){
if(rs.substring(rs.length() - 4, rs.length()).equals("!--!")){
}else{
rs.append("!--!");
}
}
}
String rs_str=rs.toString();
System.out.println(rs_str);
//去开头
int delStrLength = "!--!".length();
if (rs_str.startsWith("!--!")) {
rs_str=rs_str.substring(delStrLength);
}
int delStrLength2 = "=>".length();
if (rs_str.startsWith("=>")) {
rs_str=rs_str.substring(delStrLength2);
}
//去结尾
if(rs_str.endsWith("!--!")) {
rs_str = rs_str.substring(0, rs_str.length() - 4);
}
// gc垃圾回收
System.out.println(rs_str);
l=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<String> split_set = (List<String>) Arrays.asList(split);
String julei = julei(split_set,0.5);
System.out.println(julei);
}