java 字符串匹配度排序

前提,已经通过正则式过滤了无关字符

排序前
java 字符串匹配度排序_第1张图片
排序结果
java 字符串匹配度排序_第2张图片
方法:
一、字符串关键字索引越靠前,排序越靠前
二、索引相同,字越少越靠前

public class Test {
	
	public static void main(String[] args) {
		// TODO strsuto-generstrsted method stub
		/**
		 * 关键字
		 */
		String filter = "谢谢";
		/**
		 * 字符串的list
		 */
		List<String> filterList = new ArrayList<String>();
		filterList.add("不用谢谢");
		filterList.add("要谢谢");
		filterList.add("谢谢");
		filterList.add("no谢谢");
		filterList.add("谢谢433");
		filterList.add("谢谢017");
		
		String [][]str= SortByIndex(filterList,filter);
		SortByLength(str,filterList.size());
		
	}
	 static void SortByLength(String[][] strs,int size) {
			// TODO Auto-generated method stub
		//要检索字符串长度
			for(int i = 0;i<size;i++){
				//该行字符串长度
				int minlen = strs[i][1].length();
				int min = Integer.parseInt(strs[i][2]);
				String str = strs[i][1];
				int minindex = i;
				String sortindex = strs[i][0];
				for(int j = i+1;j<strs.length;j++){
					//if(str.indexOf(filter)==tempstr.indexOf(filter)&&a[j][0].length()
					//如果索引相同
					if(strs[i][2].equals(strs[j][2])){
						//如果剩下的字符串的长度小于上一个字符串的长度
						if(strs[j][1].length() <strs[minindex][1].length()){
							minlen = strs[j][1].length();
							min = Integer.parseInt(strs[j][2]);
							str = strs[j][1];
							sortindex = strs[j][0];
							minindex = j;
						}
					}
				}
				if(i !=  minindex){
					//交换索引位置
					strs[minindex][2] =  strs[i][2];
					 strs[i][2] =  String.valueOf(min);
					 //交换字符串位置
					 strs[minindex][1] =  strs[i][1];
					 strs[i][1] =  str;
					 //交换次数位置
					 strs[minindex][0] =  strs[i][0];
					 strs[i][0] =  sortindex;
					 
				}
				
			}
			System.out.println("=================================");
	  		for(int i = 0;i<size;i++){
		  		//查询到的结果集的第i条数据
	  			System.out.println(strs[i][1]+"-索引是 "+strs[i][2]+" 排序是"+strs[i][0]);
		  	}
	}
	/**
	 * 根据关键字的索引带大小进行排序
	 * @param filterList 包含关键字的list字符数组
	 * @param filter 关键字
	 * @return 三维字符数组,第一位是原始顺序,第二维是字符串,第三维是索引
	 */
	 static String[][] SortByIndex(List<String> filterList,String filter){
		int size = filterList.size();
		索引位置
		String[][] strs = new String[size][3];
	  	for(int i = 0;i<size;i++){
	  		//查询到的结果集的第i条数据
	  		String str = filterList.get(i).toString();
	  		int index= str.indexOf(filter);
	  		strs[i][0] = String.valueOf(i);
	  		strs[i][2] = String.valueOf(index);
	  		strs[i][1] = str;
	  		System.out.println(str+"-索引是"+ str.indexOf(filter)+" 排序是"+i);
	  	}
	  		for(int i = 0;i<strs.length-1;i++){
	  			//临时交换顺序
	  			String sortindex = strs[i][0];
	  			//临时交换字符串
	  			String str = strs[i][1];
	  			//临时交换索引用于比较
	  			int min = Integer.parseInt(strs[i][2]);
	  			
	  			//用来比较索引大小
	  			int minindex = i;
	  			for(int j = i+1;j<strs.length;j++){
	  				if(Integer.parseInt(strs[j][2])<min){
	  					min = Integer.parseInt(strs[j][2]);
	  					str = strs[j][1];
	  					sortindex = strs[j][0];
	  					minindex = j;
	  				}
	  			}
	  			if(i !=  minindex){
	  				//交换索引位置
	  				 strs[minindex][2] =  strs[i][2];
	  				 strs[i][2] =  String.valueOf(min);
	  				 //交换字符串位置
	  				 strs[minindex][1] =  strs[i][1];
	  				 strs[i][1] =  str;
	  				 //交换次数位置
	  				 strs[minindex][0] =  strs[i][0];
	  				 strs[i][0] =  sortindex;
	  			}
	  		}
	  		System.out.println("=================================");
	  		for(int i = 0;i<size;i++){
		  		//查询到的结果集的第i条数据
	  			System.out.println(strs[i][1]+"-索引是 "+strs[i][2]+" 排序是"+strs[i][0]);
		  	}
	  		return strs;
	  	}
	 
}

你可能感兴趣的:(算法)