在C#中搜索字符串中每个单词的前几个字符

时间:2012-09-27 21:33:47

标签: c# wordsearch

我是编程语言的新手。我有一个要求,我必须根据搜索字符串返回记录。

例如,请使用以下三个记录和一个“Cal”搜索字符串:

  1. 加州大学

  2. Pascal学院

  3. 加利福尼亚大学

  4. 我已经尝试了String.Contains,但这三个都被退回了。如果我使用String.StartsWith,我只获得#3记录。我的要求是在结果中返回#1和#3。

    感谢您的帮助。

7 个答案:

答案 0 :(得分:4)

如果您使用的是.NET 3.5或更高版本,我建议您使用LINQ extension methods。查看String.SplitEnumerable.Any。类似的东西:

string myString = "University of California";
bool included = myString.Split(' ').Any(w => w.StartsWith("Cal"));

Split在空格字符处划分myString并返回字符串数组。 Any适用于数组,如果任何字符串以"Cal"开头,则返回true。

如果您不想或不能使用Any,那么您必须手动循环使用这些词语。

string myString = "University of California";
bool included = false;

foreach (string word in myString.Split(' '))
{
    if (word.StartsWith("Cal"))
    {
        included = true;
        break;
    }
}

答案 1 :(得分:2)

您可以尝试:

foreach(var str in stringInQuestion.Split(' '))
{
  if(str.StartsWith("Cal"))
   {
      //do something
   }
}

答案 2 :(得分:2)

我这样简单:

if(str.StartsWith("Cal") || str.Contains(" Cal")){
    //do something
}

答案 3 :(得分:0)

您可以使用正则表达式查找匹配项。这是一个例子

    //array of strings to check
    String[] strs = {"University of California", "Pascal Institute", "California University"};
    //create the regular expression to look for 
    Regex regex = new Regex(@"Cal\w*");
    //create a list to hold the matches
    List<String> myMatches = new List<String>();
    //loop through the strings
    foreach (String s in strs)
    {   //check for a match
        if (regex.Match(s).Success)
        {   //add to the list
            myMatches.Add(s);
        }
    }

    //loop through the list and present the matches one at a time in a message box
    foreach (String matchItem in myMatches)
    {
            MessageBox.Show(matchItem + " was a match");
    }

答案 4 :(得分:0)

        string univOfCal = "University of California";
        string pascalInst = "Pascal Institute";
        string calUniv = "California University";

        string[] arrayofStrings = new string[] 
        {
        univOfCal, pascalInst, calUniv
        };

        string wordToMatch = "Cal";
        foreach (string i in arrayofStrings)
        {

            if (i.Contains(wordToMatch)){

             Console.Write(i + "\n");
            }
        }
        Console.ReadLine();
    }

答案 5 :(得分:0)

var strings = new List<string> { "University of California", "Pascal Institute", "California University" };
var matches = strings.Where(s => s.Split(' ').Any(x => x.StartsWith("Cal")));

foreach (var match in matches)
{
    Console.WriteLine(match);
}

输出:

University of California
California University

答案 6 :(得分:0)

这实际上是正则表达式的一个很好的用例。

string[] words = 
{ 
    "University of California",
    "Pascal Institute",
    "California University"
}

var expr = @"\bcal";
var opts = RegexOptions.IgnoreCase;
var matches = words.Where(x => 
    Regex.IsMatch(x, expr, opts)).ToArray();

“\ b”匹配任何单词边界(标点符号,空格等)。