Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查字符串相似性_Java_String Comparison - Fatal编程技术网

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;i
stringa,b;
整数计数=0;

对于(int i=0;我希望它们总是相同的长度?看起来您的字符串总是具有相同的长度,所以您只需要计算不同的符号。简单循环就可以了。我更新了一些错误修复的答案,希望对您有所帮助。
:)
它们总是相同的长度吗?看起来字符串总是相同的长度,所以您只需要计算不同的符号。简单循环就可以了。我更新了一些错误修复的答案,希望能有所帮助。
:)
计算相似性而不是差异不是更简单吗?你现在正在做额外的手术
(1-dif)
这也会返回1或0,因为您没有将int强制转换为doubles@nickzoum,更新了我的答案<代码>:)
好的,那就更好了。计算相似性而不是差异不是更简单吗?你现在正在做额外的手术
(1-dif)
这也会返回1或0,因为您没有将int强制转换为doubles@nickzoum,更新了我的答案<代码>:)
好的,这样更好