【问题标题】:how to compare 2 strings in c#如何在c#中比较两个字符串
【发布时间】:2015-05-05 17:36:19
【问题描述】:

我有一些这样的字符串: 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 中。我该如何解决?

【问题讨论】:

  • STA001STA003 不是STA001STA002STA003 的子字符串
  • 我希望 STA001STA003 是 STA001STA002STA003 的子字符串。我该怎么做?
  • 听起来STANNN 应该是列表中的(单个)项目。 STA001STA003 的两个 部分 出现在两个字符串中,但不是整个字符串

标签: c#


【解决方案1】:

您所描述的不是子字符串。它基本上是在向两个集合询问“这是另一个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 部分只是为了使它在字符串上下文中有意义,那么直接使用ints:

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

【讨论】:

    【解决方案2】:

    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;
    }
    

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

    注意:在 C# 中不鼓励对变量的数据类型使用匈牙利符号。

    【讨论】:

    • 如果我输入 strChild = STASTA 然后与 strParent = STA001STA002STA003 进行比较 -> 你的方式不对。请帮帮我!
    【解决方案3】:

    这可能有点矫枉过正,但它可能非常有益。

    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;
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      • 2021-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多