如何使用c#查找字符串(A)是否存在于另一个字符串(B)中?

时间:2013-09-11 08:22:28

标签: c# string

在将此标记为重复之前,请在此处阅读详细信息。

示例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的一部分”相同?

4 个答案:

答案 0 :(得分:2)

正如我的评论中所述...... Levenshtein距离算法(和类似的算法)计算字符串之间的差异并返回数值结果(wiki:http://en.m.wikipedia.org/wiki/Levenshtein_distance)。

但是,我肯定会对这些算法应用基准测试和缓存策略。它们很小,输入很小..但是当我实现它时,我必须确保我缓存结果/查找。您的大型示例将无法执行“快速”..取决于您的用例的“快速”。

答案 1 :(得分:1)

您可以使用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);

答案 2 :(得分:0)

您正在寻找的内容看起来像是一个有得分率的搜索引擎。

我使用Levenshtein Distance方法来搜索/比较看起来相同但不相同的字符串。

以下链接有一个例子:

http://www.dotnetperls.com/levenshtein

答案 3 :(得分:0)

我正在回答我自己的问题。

我一直在寻找一个解决方案,将一个字符串与另一个字符串进行比较,其中字符串A 几乎相同 ,其中部分字符串B “。

这就是我解决问题的方法。

  1. 我应用了“Longest Common Substring”算法并成立了 两个字符串之间最长的公共子字符串。

  2. 然后我使用“Levenshtein距离算法”将我的字符串A与步骤1中找到的“最长公共子字符串”进行比较。

  3. 如果步骤2中提到的算法的结果是 超过某个阈值,则表示字符串A存在于字符串B中。

  4. 解决了问题

  5. 我已经解决了这个问题一天,我找到了不错的结果。