2016-09-30 172 views
-1

我敢肯定,这已经做过,但什么我真的想要做的是有一个认定的字符连续两场比赛为一个字符串的方法,一组多个内的连续字符的数量字符串,任何匹配少于1个字符匹配,不计算。 (至少2)。比较字符串和字符串列表中查找匹配

如果与测试的字符串是 “XX声音5”,下面将结果

  1. 声音XXX-XXX-5051 NJ -----结果:10(匹配 '声音' 和'XX')
  2. YY声音-----结果:8(声音)
  3. 声音5的xy -----结果:9(空格数,所以匹配是Audible 5)
  4. Audible.com 5 -----结果:7
+1

我不明白为什么它是第一个案件的9。在字符串“xx Audible 5”中,我们有“xx”首先是“Audible”。你如何在你的问题中定义匹配? – xuanluong

+0

按照你的规则(空格数),第一个例子的结果应该是10.也就是“Audible xx”。这是10个字符。另外,如果空格计数,那么#2的结果应该是8.无论是那个还是你需要改进你的规则。例如,如果字符串是“Audible”(即8个空格,单词“Audible”),结果是15还是7?如果是“xx Audible”会怎么样? –

+0

@jim我已更新它。感谢您的支持。所以它总是匹配的数量(超过1)加在一起 – user1112324

回答

1

试试这个。这不是最佳的,但它工作得很好

static int FindMatch(string text, string pattern) 
    { 
     var total = 0;   
     for (int i = 0; i < pattern.Length; i++) 
     { 
      var max = 0;    
      for (int j = 2; j <= pattern.Length - i; j++) 
      { 
       var temp = pattern.Substring(i, j); 
       if (text.Contains(temp))     
        if (max < temp.Length)       
         max = temp.Length; 
      } 
      total += max; 
      if (max > 0) 
       i += max-1; 
     } 
     return total; 
    } 
  • FindMatch("Audible xxx-xxx-5051 NJ", "xx Audible 5");收益10

  • FindMatch("yy Audible", "xx Audible 5");返回8

  • FindMatch("Audible 5 xy", "xx Audible 5");回到9
  • FindMatch("Audible.com 5", "xx Audible 5");回报9太多,而不是7,因为正如我在这个例子中可以理解为空间5“5”
+0

非常感谢你... – user1112324

+0

如果我可以帮助你,请将答案标记为正确 –