显示两个字符串之间的交集

时间:2015-05-12 00:48:14

标签: c# string

我试图找到两个字符串之间的交集。例如,如果字符串1为my car is bad,字符串2为my horse is good,则返回my is。 这是我的代码:

  public static string intersection2(string x1, string x2)
{
  string[] string1 = x1.Split(' ');
string[] string2 = x2.Split(' ');
string[] m = string1.Distinct();
 string[] n = string2.Distinct();
  string Test;
 var results = m.Intersect(n,StringComparer.OrdinalIgnoreCase);
 Test = results.ToString();
   return Test;

}

但我收到错误System.Linq.Enumerable+d__92 1 [System.String]`。有人可以解释一下发生了什么,以及我如何解决它?

4 个答案:

答案 0 :(得分:3)

您没有看到错误 - 您看到的是result类型的完全限定名称,即System.Linq.Enumerable+d_921[System.String]。这是ToString()的默认行为,除非它在继承类中被覆盖。请参阅Object.ToString()

要显示交叉点的结果,您可以使用String.Join,如下所示:

Test = String.Join(" ", results);

哪会产生my is

请注意,您发布的代码无法编译:

string[] m = string1.Distinct();
string[] n = string2.Distinct();

以上行生成Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<string>' to 'string[]'。添加.ToArray()是解决此问题的一种方法。完整代码如下:

public static string intersection2(string x1, string x2)
{

    string[] string1 = x1.Split(' ');
    string[] string2 = x2.Split(' ');
    string[] m = string1.Distinct().ToArray();
    string[] n = string2.Distinct().ToArray();
    string Test;
    var results = m.Intersect(n, StringComparer.OrdinalIgnoreCase);
    Test = String.Join(" ", results);
    return Test;
}

答案 1 :(得分:0)

你的逻辑没问题,你可以通过修改一点来使其工作

public static string intersection2(string x1, string x2)
{
    string[] string1 = x1.Split(' ');
    string[] string2 = x2.Split(' ');
    var m = string1.Distinct();
    var n = string2.Distinct();

    var results = m.Intersect(n, StringComparer.OrdinalIgnoreCase);
    //The result is a list of string, so we just have to concat them
    var test = " ";
    foreach(var k in results) test += k + " ";
    return test;
}

工作小提琴:https://dotnetfiddle.net/joO0d9

答案 2 :(得分:0)

这基本上是因为你厌倦了获得string的{​​{1}}表示并且它完全正常,因为它返回IEnumerable<string>类的默认ToString()。所以为了解决这个问题,你应该以某种方式创建自己的字符串表示,这将是s.t.像这样:

object

另请注意,无需获取数组的string[] string1 = x1.Split(' '); string[] string2 = x2.Split(' '); string Test; var results = string1.Intersect(string2, StringComparer.OrdinalIgnoreCase); Test = string.Join(" ", results); 结果,因为Distinct是一个设置操作并自然返回Intersect结果!

答案 3 :(得分:0)

此程序获取2个字符串的交集(假设允许重复)

public String getIntersection(String s1, String s2) {
    String common = "";
    for (int i = 0; i < s1.length(); i++) {
        for (int j = 0; j < s2.length(); j++) {
            if (s1.length() == 0 || s1.length() == 0)
                return common;
            if (s1.charAt(i) == s2.charAt(j)) {
                common = common + s1.charAt(i);
                // delete character from each if there is a match
                s1 = s1.substring(0, i) + s1.substring(i + 1);
                s2 = s2.substring(0, j) + s2.substring(j + 1);
                i = -1;
                break;
            }
        }
    }
    return common;
}