在C#中使用LINQ在字符串数组中查找确切的子字符串

时间:2017-05-11 14:17:17

标签: c# arrays string linq substring

我正在尝试查看字符串数组中是否存在确切的子字符串。如果子字符串存在于字符串中,它将返回true,但它将包含拼写错误。

编辑: 例如,如果我正在检查字符串数组中是否存在“Connecticut”,但拼写为“Connecticute”,它仍会返回true,但我不想这样做。我希望它为'Connecticute'返回false并返回true     '康涅狄格'只有

有没有办法用LINQ做到这一点?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace ConsoleApplication2
{
class Program
{
    static void Main(string[] args)
    {
        string[] sample = File.ReadAllLines(@"C:\samplefile.txt");
        /* Sample file containing data organised like
        Niall      Gleeson      123 Fake Street     UNIT 63     Connecticute     00703       USA      
         */

        string[] states = File.ReadAllLines(@"C:\states.txt"); //Text file containing list of all US states
        foreach (string s in sample)
        {
            if (states.Any(s.Contains))
            {
                Console.WriteLine("Found State");
                Console.WriteLine(s);
                Console.ReadLine();
            }
            else
            {
                Console.WriteLine("Could not find State");
                Console.WriteLine(s);
                Console.ReadLine();
            }
        }
    }
}
  }

2 个答案:

答案 0 :(得分:6)

如果字符串的一部分在匹配的字符串中的任何位置,则

String.Contains返回true。

因此"Conneticute".Contains("Conneticut")将成立。

如果您想要完全匹配,那么您正在寻找的是String.Equals

...
if (states.Any(s.Equals))
...

答案 1 :(得分:4)

您可以使用\b来匹配word breaking个字符(即。空格,句点,字符串的开头或结尾等):

  var r = new Regex("\bConneticut\b", RegexOptions.IgnoreCase);
  var m = r.Match("Conneticute");
  Console.WriteLine(m.Success); // false