java - 在 Java 中实现 Soundex

请帮我用java实现字符串相似度比较! 使用 org.apache.commons.codec.language.Soundex 库

Soundex soundex = new Soundex();
String phoneticValue = soundex.encode("YourString");
String phoneticValue2 = soundex.encode("YourStrink");

if(phoneticValue.equals(phoneticValue2)){

}

好像不行。如果字符串相似,编码函数会给出不同的结果。 如何将两个相似的字符串与该库进行比较?

期待您的来信! ;)

最佳答案

class Soundex{
private static int getConsonantCode( char ch ){
    String codeList[] = { "BFPV", "CGJKQSXZ","DT","L","MN","R" };
    int code = 0;
    for( int i = 0 ; i < codeList.length ; i++ ){
         if( codeList[i].indexOf(ch) >= 0 ) {
            code = i+1;
        }
    }
    return code;
}
private static boolean isVowel( char ch ){
    return (new String("AEIOUaeiou")).indexOf(ch) >= 0 ;
}
public static String getSoundexCode( String str ){
    str=str.toUpperCase();
    String soundexCode = "" + str.charAt(0), temp="";
    int length = str.length();
    char curr, prev, next;{ }
    String dropList = "AEIOUYHW";
    for( int i=1 ; i< length ; i++ ){
        curr = str.charAt(i);
        prev = str.charAt( i-1 );
        if( ( curr=='H' || curr == 'W') && i != length-1 ){
            if( temp.length() >= 2) temp=temp.substring(1);
            next=str.charAt( i+1 );
            if( isVowel(curr) && getConsonantCode( prev ) == getConsonantCode( next ) ){
                temp += prev+prev;
                i=i+1;
            }else if( getConsonantCode( prev ) == getConsonantCode(next) ){
                temp += prev;
                i=i+1;
            }
        }else if( getConsonantCode( curr ) != getConsonantCode(prev) ){
            if( dropList.indexOf( curr ) == -1 ){
                temp += curr;
            }
        }
    }
    temp = ( temp + "0000" ).substring( 0, 3 );
    for( int i = 0; i<=2 ; i++ ){
        soundexCode += getConsonantCode( temp.charAt(i) );
    }
    return soundexCode;
}
}

https://stackoverflow.com/questions/43275987/

相关文章:

arduino - ESP8266 不断重启 rst cause :4, boot mode :(3

amazon-web-services - Amazon Cognito 删除账户

android - 使用 ADB shell 命令从 Android 设备读取短信

python - 使用PIL打开图片颜色不对

scala - 使用 scala 导入的文件字段中带有换行符 (LF) 的 Spark CSV 问题

python - 如何访问FormView中的request对象

php - 如何在 Laravel 中使用 NewsAPI

python - 有没有内置MSMOTE

php - 如何通过 stripe checkout 传递账单明细

angular - 如何在 Angular 2的小数管道中使用变量