Java 如何检查字符串相似性
我需要比较两个字符串,看看它们是否相似,以及多少相似。例如,我有一个字符串Java 如何检查字符串相似性,java,string-comparison,Java,String Comparison,我需要比较两个字符串,看看它们是否相似,以及多少相似。例如,我有一个字符串“5000002105416”,与“5000003205416”相比,它应该给我一个结果0.85,因为在包含13符号的两个字符串中只有2个不匹配的符号。原因是我正在使用Zbar进行条形码扫描,有时它会给我一个有点错误的结果,我需要检查这个结果是否与我需要匹配的一些硬编码标签相似。您可以很容易地使用如下方法: public static double compare(String string, String compare
“5000002105416”
,与“5000003205416”
相比,它应该给我一个结果0.85
,因为在包含13
符号的两个字符串中只有2个不匹配的符号。原因是我正在使用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);
}
或者类似的。您也可以使用类似的逻辑来防止为空。您可以很容易地使用如下方法:
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
。假设您的字符串具有相同的长度,因此您需要一个函数来迭代这两个字符串,比较每个字符
,并找出差异的数量:
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();
}
双重相似性(字符串a、字符串b){
如果(a.length()==0)返回1;
int numberOf=0;
对于(int i=0;i
假设您的字符串具有相同的长度,因此您需要一个函数来迭代这两个字符串,比较每个字符
,并找出差异的数量:
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();
}
双重相似性(字符串a、字符串b){
如果(a.length()==0)返回1;
int numberOf=0;
对于(int i=0;i字符串a、b;
整数计数=0;
对于(inti=0;istringa,b;
整数计数=0;
对于(int i=0;我希望它们总是相同的长度?看起来您的字符串总是具有相同的长度,所以您只需要计算不同的符号。简单循环就可以了。我更新了一些错误修复的答案,希望对您有所帮助。:)
它们总是相同的长度吗?看起来字符串总是相同的长度,所以您只需要计算不同的符号。简单循环就可以了。我更新了一些错误修复的答案,希望能有所帮助。:)
计算相似性而不是差异不是更简单吗?你现在正在做额外的手术(1-dif)
这也会返回1或0,因为您没有将int强制转换为doubles@nickzoum,更新了我的答案<代码>:)
好的,那就更好了。计算相似性而不是差异不是更简单吗?你现在正在做额外的手术(1-dif)
这也会返回1或0,因为您没有将int强制转换为doubles@nickzoum,更新了我的答案<代码>:)
好的,这样更好