c# - Soundex 算法的一些变化

标签 c# java asp.net soundex

此算法设置为遍历第一个单词或直到它填满四个编码字符串。例如,输入“Horrible Great”的结果是:H612。它忽略了第二个单词,换句话说,它只用第二个单词的第一个字母来填充编码字符串。

我想通过获取第一个单词并找到其编码字符串然后获取第二个单词并找到其编码字符串来更改它;输出应为“H614 G600”。 我想知道是否有办法通过对**此代码进行一些更改来做到这一点。
非常感谢:)

    private string Soundex(string data)
    {
        StringBuilder result = new StringBuilder();
        if (data != null && data.Length > 0)
        {
            string previousCode = "", currentCode = "", currentLetter = "";
            result.Append(data.Substring(0, 1));
            for (int i = 1; i < data.Length; i++)
            {
                currentLetter = data.Substring(i,1).ToLower();
                currentCode = "";

                if ("bfpv".IndexOf(currentLetter) > -1)
                    currentCode = "1";
                else if ("cgjkqsxz".IndexOf(currentLetter) > -1)
                    currentCode = "2";
                else if ("dt".IndexOf(currentLetter) > -1)
                    currentCode = "3";
                else if (currentLetter == "l")
                    currentCode = "4";
                else if ("mn".IndexOf(currentLetter) > -1)
                    currentCode = "5";
                else if (currentLetter == "r")
                    currentCode = "6";

                if (currentCode != previousCode)
                    result.Append(currentCode);

                if (result.Length == 4) break;

                if (currentCode != "")
                    previousCode = currentCode;
            }
        }

        if (result.Length < 4)
            result.Append(new String('0', 4 - result.Length));

        return result.ToString().ToUpper();
    }

最佳答案

当然,这是我想出的解决方案。我用另一种拆分字符串并调用原始方法的方法包装了现有算法。要使用它,您可以调用 SoundexByWord("Horrible Great") 而不是调用 Soundex("Horrible Great") 并获得“H614 G630”的输出。

private string SoundexByWord(string data)
{
    var soundexes = new List<string>();
    foreach(var str in data.Split(' ')){
        soundexes.Add(Soundex(str));
    }
#if Net35OrLower
    // string.Join in .Net 3.5 and before require the second parameter to be an array.
    return string.Join(" ", soundexes.ToArray());
#endif
    // string.Join in .Net 4 has an overload that takes IEnumerable<string>
    return string.Join(" ", soundexes);
}

关于c# - Soundex 算法的一些变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7652253/

相关文章:

java - 如何将字母倒过来?

c# - 带有实例参数的 SQL 连接字符串

asp.net - 用Chrome调试每次都会弹出 "Restore pages?"

c# - 如何检查内存映射文件是否存在?

c# - 创建没有自动生成代理的 WCF 客户端

java - Firebase Cloud Messaging 多次发送上游消息,尽管我发送了确认

java - 在 Java 中重复执行 SwingWorker

asp.net - FormsAuthenticationModule 在哪里注册?

c# - Action<T> 为变量赋值

c# - 通过 ContextMenu 显示/隐藏 GridViewColumns