如何检查字符串相似性

时间:2016-10-15 13:22:30

标签: java string-comparison

我需要比较两个字符串,看看它们是否相似,以及它们的相似程度。例如,我有一个字符串"5000002105416",并与"5000003205416"进行比较,它应该给我结果0.85,因为在两个包含的字符串中只有2符号不匹配13个符号。原因是我使用Zbar进行条形码扫描,有时它会给我一些错误的结果,我需要检查这个结果是否与我需要匹配的一些硬编码标签相似。

3 个答案:

答案 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);