C# 在C中搜索字符串中每个单词的前几个字符#
我不熟悉编程语言。我需要根据搜索字符串返回记录 例如,以以下三条记录和搜索字符串“Cal”为例:C# 在C中搜索字符串中每个单词的前几个字符#,c#,wordsearch,C#,Wordsearch,我不熟悉编程语言。我需要根据搜索字符串返回记录 例如,以以下三条记录和搜索字符串“Cal”为例: 加利福尼亚大学 帕斯卡学院 加利福尼亚大学 我尝试了String.Contains,但三个都返回了。如果我使用String.StartsWith,我只会得到记录#3。我的要求是在结果中返回#1和#3 谢谢您的帮助。您可以尝试: foreach(var str in stringInQuestion.Split(' ')) { if(str.StartsWith("Cal")) {
String.Contains
,但三个都返回了。如果我使用String.StartsWith
,我只会得到记录#3。我的要求是在结果中返回#1和#3
谢谢您的帮助。您可以尝试:
foreach(var str in stringInQuestion.Split(' '))
{
if(str.StartsWith("Cal"))
{
//do something
}
}
如果您使用的是.NET 3.5或更高版本,我建议您使用。退房并离开。比如:
string myString = "University of California";
bool included = myString.Split(' ').Any(w => w.StartsWith("Cal"));
Split
在空格字符处分割myString
,并返回字符串数组Any
对数组有效,如果任何字符串以“Cal”
开头,则返回true
如果您不想或不能使用任何
,则必须手动循环单词
string myString = "University of California";
bool included = false;
foreach (string word in myString.Split(' '))
{
if (word.StartsWith("Cal"))
{
included = true;
break;
}
}
为了简单起见,我喜欢这样:
if(str.StartsWith("Cal") || str.Contains(" Cal")){
//do something
}
可以使用正则表达式查找匹配项。这里有一个例子
//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");
}
//要检查的字符串数组
String[]strs={“加利福尼亚大学”、“帕斯卡研究所”、“加利福尼亚大学”};
//创建要查找的正则表达式
正则表达式正则表达式=新正则表达式(@“Cal\w*”);
//创建一个列表来保存匹配项
List myMatches=新列表();
//在字符串中循环
foreach(strs中的字符串s)
{//检查是否匹配
if(regex.Match.Success)
{//添加到列表中
myMatches.Add(s);
}
}
//循环浏览列表,并在消息框中一次显示一个匹配项
foreach(myMatches中的字符串匹配项)
{
Show(matchItem+“是匹配项”);
}
这实际上是正则表达式的一个很好的用例
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”匹配任何单词边界(标点、空格等)。使用string.Contains,然后删除第二个。如果要查找记录中任何单词的开头,需要
Split()
每条记录,并对拆分数组中的每个元素执行StartsWith。查看string.Split(),然后循环遍历每个单词。出于好奇,使用Lambda表达式的新手怎么样?我喜欢这个答案,但我不确定刚接触编程的人会怎么做。我猜这可能会让他们感到困惑。就我个人而言,我会避免与新手一起使用Lambdas,只是为了避免学习曲线过于陡峭,尽管提出的解决方案肯定是一个很好的解决方案。我说,开始永远都不会太早!但为了以防万一,我为每个例子都提供了一个示例。我建议从最具可读性的技术开始。那么为什么不使用linq呢?这是一个很好的答案,只要确保您没有一个字符串能够多次满足此if
语句,比如“加利福尼亚Calliopes研究所”:)您应该提供代码之外的内容,特别是请提供一些关于您的代码实际执行的操作以及为什么它工作的信息。OP已经声明他/她是一个新的编程人员,因此一段没有对其工作方式进行评论的代码不会有多大帮助。
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
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();