[英]How do I find if a string(A) exists in another string(B) using c#?
在将此标记为重复之前,请在此处阅读详细信息。
范例1:
String A: The seven habits of highly effective people.
String B: "This is a sample text. There is only one product in it. It is a book. The book is The seven habits of highly effective people."
范例2:
String A: The seven habits of highly effective people.
String B: "This is a sample text. There is only one product in it. It is a book. The book is The seven habits of highly effective peopl."
现在使用类似的代码来解决上述示例
B.Contains(A)
会给出正确的结果。 但是,相同的代码将返回“ false”作为示例2中的输出。
我该如何解决这个问题?
示例2中缺少一个“ e”,我知道它,这就是问题所在。 我如何比较一个字符串与另一个字符串,其中字符串A与“字符串B的一部分”几乎相同?
如我的评论所述。Levenshtein距离算法(和类似算法)计算字符串之间的差异并返回数值结果(Wiki: http : //en.m.wikipedia.org/wiki/Levenshtein_distance )。
但是,我肯定会对这些算法应用基准测试和缓存策略。 他们用少量输入就可以了..但是当我实现它时,我必须确保我缓存结果/查找。 您的大型示例将不会执行“快速” ..取决于您的用例是什么“快速”。
您可以使用string.compare
,在下面找到一些可能对您有所帮助的示例。
string a = "a";
string b = "b";
int c;
c = string.Compare(a, b);
Console.WriteLine(c);
c = string.CompareOrdinal(b, a);
Console.WriteLine(c);
c = a.CompareTo(b);
Console.WriteLine(c);
c = b.CompareTo(a);
Console.WriteLine(c);
您正在寻找的东西看起来像是带有分数率的搜索引擎。
我使用了Levenshtein距离方法来搜索/比较看起来相同但不相似的字符串。
以下链接中有一个示例:
我在回答我自己的问题。
我一直在寻找一种解决方案,将一个字符串与另一个字符串进行比较,其中字符串A与“ 字符串B的一部分 ” 几乎相同 。
这就是我解决问题的方式。
我应用了“ 最长公共子串 ”算法,并在两个字符串之间建立了最长公共子串。
然后,我使用“ Levenshtein距离算法”将我的字符串A与从步骤1中找到的“最长公共子字符串”进行比较。
如果步骤2中提到的算法可获得的结果高于某个阈值,则表明字符串A存在于字符串B中。
问题解决了 。
我已经在问题上工作了一天,并且发现了不错的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.