我需要比较两个字符串,看看它们是否相似,以及它们的相似程度。例如,我有一个字符串"5000002105416"
,并与"5000003205416"
进行比较,它应该给我结果0.85
,因为在两个包含的字符串中只有2
符号不匹配13
个符号。原因是我使用Zbar进行条形码扫描,有时它会给我一些错误的结果,我需要检查这个结果是否与我需要匹配的一些硬编码标签相似。
答案 0 :(得分:4)
假设您的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();
}
答案 1 :(得分:0)
您可以轻松拥有以下方法:
#header img {
width: 100%;
max-width: 1024px;
}
#header h1 {
color: #FFFFFF;
text-shadow: 3px 3px #000000;
font-size: 50px;
}
#header h2 {
color: #FFFFFF;
text-shadow: 3px 3px #000000;
font-size: 35px;
}
如果你插入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);
}
或空字符串,这会抛出一些错误,所以如果你不想这样,你可以添加一些返回0的检查,如:
null
或类似的东西。您也可以使用类似的逻辑来阻止if(string.isEmpty()){
if(compareString.isEmpty()){
return 1;
}
return 0;
}else if(compareString.isEmpty()){
return 0;
}
。
答案 2 :(得分:0)
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);