获取两个字符串之间的公共部分

本文关键字:之间 公共部 字符串 两个 获取 | 更新日期: 2023-09-27 18:13:14

我需要的是得到两个单词之间的共同点和区别。

例子:

场景1

  • word1 = 感言
  • word2 = Test

将返回

  • 通用部分测试,差值标准部分

场景2

  • word1 = Test
  • word2 = 感言

将返回

  • 通用部分测试,差值标准部分

场景3

  • word1 = 感言
  • word2 = Tesla

将返回

  • 共同部分Tes,差异时序la

两个词的共同部分总是在开头。

换句话说,我需要保留单词的开头,直到单词变得不同,然后我需要得到差异。

我尽量避免使用大量的if和for。

谢谢大家

获取两个字符串之间的公共部分

LINQ alternative:

string word1 = "Testimonial", word2 = "Tesla";
string common = string.Concat(word1.TakeWhile((c, i) => c == word2[i]));
string[] difference = { word1.Substring(common.Length), word2.Substring(common.Length) };
class Program
{
    static void Main(string[] args)
    {
        string word1 = "Testimonial";
        string word2 = "Tesla";
        string common = null;
        string difference1 = null;
        string difference2 = null;
        int index = 0;
        bool same = true;
        do
        {
            if (word1[index] == word2[index])
            {
                common += word1[index];
                ++index;
            }
            else
            {
                same = false;
            }
        } while (same && index < word1.Length && index < word2.Length);
        for (int i = index; i < word1.Length; i++)
        {
            difference1 += word1[i];
        }
        for (int i = index; i < word2.Length; i++)
        {
            difference2 += word2[i];
        }
        Console.WriteLine(common);
        Console.WriteLine(difference1);
        Console.WriteLine(difference2);
        Console.ReadLine();
    }
}

您可以使用IntersectExcept来获取它:

static void Main(string[] args)
{
    var string1 = "Testmonial";
    var string2 = "Test";
    var intersect = string1.Intersect(string2);
    var except = string1.Except(string2);
    Console.WriteLine("Intersect");
    foreach (var r in intersect)
    {
        Console.Write($"{r} ");
    }
    Console.WriteLine("Except");
    foreach (var r in except)
    {
        Console.Write($"{r} ");
    }
    Console.ReadKey();
}

注意,这是一个简单的解决方案。例如:如果更改字符串的顺序,Except将不起作用,例如:

"Test".Except("Testmonial");