JAVA obtain the similarity between two strings

This is a very useful feature.

The method requires two strings pass, has been calculated, the similarity of two strings returns the return value of type float.

First look at a few test results

String 1: "Dear friends, Hello everybody morning."
String 2: "Dear friends, Hello, everyone at night."

Return result: 92.30769

String 1: "Dear friends, Hello everybody morning."
String 2: "Hello everyone at night."

Return result: 38.461536

String 1: "Hello everybody evening, sounds and talk to the author's writing style and story to fill the gap, write the medicine graduate pool left with much ambition, no job right things, and turned the corner, famous favorable difficult; "
string 2:" Hello everyone at night. "

Return result: 7.936507

String 1:. "Good evening big"
String 2: "Hello everyone at night."

Return result: 0.0

"Good good much much everyone and everyone and everyone on The Late Late Late Late at night on the Shang Hao .....": String 1
String 2: "Hello everyone at night."

Return result: 20.0

By these few examples, we should be able to see that this approach has any effect.

code show as below:

public static float getSimilarityRatio(String str, String target) {

	int d[][]; // 矩阵
	int n = str.length();
	int m = target.length();
	int i; // 遍历str的
	int j; // 遍历target的
	char ch1; // str的
	char ch2; // target的
	int temp; // 记录相同字符,在某个矩阵位置值的增量,不是0就是1
	if (n == 0 || m == 0) {
		return 0;
	}
	d = new int[n + 1][m + 1];
	for (i = 0; i <= n; i++) { // 初始化第一列
		d[i][0] = i;
	}

	for (j = 0; j <= m; j++) { // 初始化第一行
		d[0][j] = j;
	}

	for (i = 1; i <= n; i++) { // 遍历str
		ch1 = str.charAt(i - 1);
		// 去匹配target
		for (j = 1; j <= m; j++) {
			ch2 = target.charAt(j - 1);
			if (ch1 == ch2 || ch1 == ch2 + 32 || ch1 + 32 == ch2) {
				temp = 0;
			} else {
				temp = 1;
			}
			// 左边+1,上边+1, 左上角+temp取最小
			d[i][j] = Math.min(Math.min(d[i - 1][j] + 1, d[i][j - 1] + 1), d[i - 1][j - 1] + temp);
		}
	}

	return (1 - (float) d[n][m] / Math.max(str.length(), target.length())) * 100F;
}~~~~
This method can be used directly.

Guess you like

Origin www.cnblogs.com/shangyangyang/p/11350322.html