如何检查字符串相似度
How to check for String similarity
我需要比较两个字符串,看看它们是否相似,相似程度如何。例如,我有一个字符串 "5000002105416"
,与 "5000003205416"
相比,它应该给我结果 0.85
,因为只有 2
个符号在包含的两个字符串中不匹配13
个符号。原因是我用Zbar扫描条码,有时会出现一些错误的结果,我需要检查这个结果是否与我需要匹配的一些硬编码标签相似。
您可以很容易地使用如下方法:
public static double compare(String string, String compareString){
int length = string.length();
int comLength = compareString.length();
int max = length;
int min = comLength;
int result = 0;
if (length < comLength){
max = comLength;
min = length;
}
for(int index = 0; index < min; index++){
if(string.charAt(index) == compareString.charAt(index)){
result++;
}
}
return (double)(result)/ (double)(max);
}
如果您插入 null
或空字符串,这将引发一些错误,因此如果您不想这样,您可以添加一些 return 0 的检查,例如:
if(string.isEmpty()){
if(compareString.isEmpty()){
return 1;
}
return 0;
}else if(compareString.isEmpty()){
return 0;
}
或者类似的东西。您也可以使用类似的逻辑来防止 nulls
。
假设您的 String
具有相同的长度,因此您需要一个函数来遍历它们,比较每个 char
并找出差异的数量:
double similarity(String a, String b) {
if(a.length() == 0) return 1;
int numberOfSimilarities = 0;
for(int i = 0; i < a.length(); ++i) {
if(a.charAt(i) == b.charAt(i)) {
++numberOfSimilarities;
}
}
return (double) numberOfSimilarities / a.length();
}
String a, b;
int count = 0;
for(int i = 0; i<13; i++){
if(a.charAt(i)==b.charAt(i)) count++;
}
System.out.println(count/13.0);
我需要比较两个字符串,看看它们是否相似,相似程度如何。例如,我有一个字符串 "5000002105416"
,与 "5000003205416"
相比,它应该给我结果 0.85
,因为只有 2
个符号在包含的两个字符串中不匹配13
个符号。原因是我用Zbar扫描条码,有时会出现一些错误的结果,我需要检查这个结果是否与我需要匹配的一些硬编码标签相似。
您可以很容易地使用如下方法:
public static double compare(String string, String compareString){
int length = string.length();
int comLength = compareString.length();
int max = length;
int min = comLength;
int result = 0;
if (length < comLength){
max = comLength;
min = length;
}
for(int index = 0; index < min; index++){
if(string.charAt(index) == compareString.charAt(index)){
result++;
}
}
return (double)(result)/ (double)(max);
}
如果您插入 null
或空字符串,这将引发一些错误,因此如果您不想这样,您可以添加一些 return 0 的检查,例如:
if(string.isEmpty()){
if(compareString.isEmpty()){
return 1;
}
return 0;
}else if(compareString.isEmpty()){
return 0;
}
或者类似的东西。您也可以使用类似的逻辑来防止 nulls
。
假设您的 String
具有相同的长度,因此您需要一个函数来遍历它们,比较每个 char
并找出差异的数量:
double similarity(String a, String b) {
if(a.length() == 0) return 1;
int numberOfSimilarities = 0;
for(int i = 0; i < a.length(); ++i) {
if(a.charAt(i) == b.charAt(i)) {
++numberOfSimilarities;
}
}
return (double) numberOfSimilarities / a.length();
}
String a, b;
int count = 0;
for(int i = 0; i<13; i++){
if(a.charAt(i)==b.charAt(i)) count++;
}
System.out.println(count/13.0);