当更多字符看起来时,在equal()中获得真实

问题描述 投票:2回答:4

大多数字符相似时如何识别两个字符串

我希望在这个样本中得到true

"Hello Wolrld" == "HelloWorld"

要么

"hello world!!" == "helloworld"

我知道这些并不相同,但由于大多数角色都是一样的,这对我来说已经足够了

提前致谢

c# string equals
4个回答
2
投票

用这个

Regex.Replace(textBox1.Text, @"[^0-9a-zA-Z]+", "").ToLower() == your string in lower case

2
投票

您可以计算两个字符串的Levenshtein distance(例如参见此C# implementation),然后定义一个阈值,您可以将该字符串视为“相等”。

合理的门槛取决于您的要求。也许,将谓词定义为d <= a * Math.Min(string1.Length, string2.Length)应该有效,其中d是字符串的Levenshtein距离,而a是0和1之间“相似性”的因素。在你的例子中,a==0.3应该有用。


0
投票

如果您正在寻找一个非常基本的检查,您可以使用Zip对字符进行枚举来比较它们,计算匹配的字母,如果匹配数超过某个阈值,则报告为真。如果一个字符串是另一个字符串的移位版本,则不会捕获它;它只会在同一个索引处捕获共同的字母。

public static class ExtensionMethods
{
    public static bool FuzzyCompare(this string lhs, string rhs, float ratioRequired)
    {
        var matchingLetters =  lhs.Zip
            ( 
                rhs, 
                (a,b) => a == b ? 1 : 0
            )
            .Sum();
        return (float)matchingLetters / (float)lhs.Length > ratioRequired;
    }
}

要比较两个字符串以查看它们是否匹配至少一半的字母,请传递0.5的ratioRequired

    public static void Main()
    {

        var a = "ABCD";
        var b = "ABCDEFGHI";

        Console.WriteLine( a.FuzzyCompare(b, 0.5F) );
    }

输出:

True

Code on DotNetFiddle


0
投票

如果80%的单词是相似的,那么这是真的。试试这个

            String str1 = "Hello world";
            String str2 = "Helloworld!!";

            char[] charArray;

            int per = 0;
            int c = 0;
            if (str1.length() > str2.length()) {

                per = (str1.length() * 80) / 100; // 80% per match logic

                charArray = str1.toCharArray();

                for (int i = 0; i < str1.length(); i++) {

                    String chars = String.valueOf(charArray[i]);

                    if (str2.contains(chars)) {
                        c++;
                    }
                }
            } else {
                per = (str1.length() * 80) / 100; // 80% per match logic

                charArray = str2.toCharArray();

                for (int i = 0; i < str2.length(); i++) {

                    String chars = String.valueOf(charArray[i]);

                    if (str1.contains(chars)) {
                        c++;
                    }
                }
            }
            if (c >= per) {
                Toast.makeText(getApplicationContext(), "true", 0).show();
            } else {
                Toast.makeText(getApplicationContext(), "false", 0).show();
            }
© www.soinside.com 2019 - 2024. All rights reserved.