如何比较c#中的2个字符串

时间:2015-05-05 17:36:20

标签: c#

我有一些像这样的字符串: str1 = STA001,str2 = STA002,str3 = STA003 并有代码来比较字符串:

private bool IsSubstring(string strChild, string strParent)
    {
            if (!strParent.Contains(strChild))
            {
                return false;
            }
            else return true;
    }

如果我有strChild = STA001STA002和strParent = STA001STA002STA003然后返回true但是当我输入strChild = STA001STA003并检查strParent = STA001STA002STA003然后返回false,尽管STA001STA003包含在strParent中。我该如何解决?

3 个答案:

答案 0 :(得分:4)

您所描述的不是子串。它基本上要求两个集合的问题是“这是另一个a subset的问题吗?”当集合a set(例如HashSet<T>)比集合是一个大的连接字符串时,这个问题要容易得多。

这是编写代码的更好方法:

var setOne = new HashSet<string> { "STA001", "STA003" };

var setTwo = new HashSet<string> { "STA001", "STA002", "STA003" };

Console.WriteLine(setOne.IsSubsetOf(setTwo)); // True
Console.WriteLine(setTwo.IsSubsetOf(setOne)); // False

或者,如果STA00部分只是填充以使其在字符串的上下文中有意义,那么直接使用int

var setOne = new HashSet<int> { 1, 3 };

var setTwo = new HashSet<int> { 1, 2, 3 };

Console.WriteLine(setOne.IsSubsetOf(setTwo)); // True
Console.WriteLine(setTwo.IsSubsetOf(setOne)); // False

答案 1 :(得分:0)

Contains方法只查找完全匹配,它不会查找字符串的部分内容。

将子字符串划分为其部分,并查找父字符串中的每个部分:

private bool IsSubstring(string child, string parent) {
  for (int i = 0; i < child.Length; i+= 6) {
    if (!parent.Contains(child.Substring(i, 6))) {
      return false;
    }
  }
  return true;
}

但是,您应该考虑跨部件匹配是否可行,如果这是一个问题。例如。在"1STA00"中寻找"STA001STA002"。如果这是一个问题,那么你应该类似地划分父字符串,并且只在部分之间进行直接比较,而不是使用Contains方法。

注意:在C#中不鼓励使用匈牙利表示法来表示变量的数据类型。

答案 2 :(得分:0)

这可能有点过分,但可能会非常有益。

private static bool ContainedWord(string input, string phrase)
{
     var pattern = String.Format(@"\b({0})", phrase);
     var result = Regex.Match(input, pattern);

     if(string.Compare(result, phrase) == 0)
          return true;

     return false;
}

如果表达式找到匹配项,则将结果与您的短语进行比较。如果它们为零,则匹配。我可能会误解你的意图。