ZetCode

C# 搜索字符串

最后修改于 2024 年 1 月 26 日

在本文中,我们将展示如何在 C# 语言中搜索字符串。

C# 提供了几种搜索字符串的方法,包括 ContainsStartsWithEndsWithIndexOfLastIndexOf。 更复杂的搜索操作可以使用 Regex 类执行。

C# Contains

Contains 方法返回一个布尔值,指示子字符串是否出现在指定的字符串中。

Program.cs
var text = "An old hawk in the sky";
var word = "hawk";

if (text.Contains(word))
{
    Console.WriteLine($"The text contains the {word} word");
} else 
{
    Console.WriteLine($"The text does not contain the {word} word");
}

在此示例中,我们在句子中查找 hawk 单词。

$ dotnet run
The text contains the hawk word

C# StartsWith 和 EndsWith

StartsWith 确定字符串的开头是否与指定的字符串匹配,而 EndsWith 确定字符串的结尾是否与指定的字符串匹配。

Program.cs
var text = "old hawk";

if (text.StartsWith("old"))
{
    Console.WriteLine("The text starts with the old string");
} else
{
    Console.WriteLine("The text does not with the old string");
} 

if (text.EndsWith("hawk"))
{
    Console.WriteLine("The text ends with the hawk string");
} else 
{
    Console.WriteLine("The text does not end with the hawk string");
}

在此示例中,我们展示了这两种方法的用法。

$ dotnet run
The text starts with the old string
The text ends with the hawk string

C# IndexOf 和 LastIndexOf

IndexOf 方法查找指定的 Unicode 字符或字符串第一次出现的从零开始的索引;如果未找到字符或字符串,则返回 -1。 LastIndexOf 方法查找指定的 Unicode 字符或字符串最后一次出现的从零开始的索引;如果未找到字符或字符串,则返回 -1。

Program.cs
var text = "There is an old hawk in the sky. The sun is shining.";
var word = "is";

int first = text.IndexOf(word);
int last = text.LastIndexOf(word);

Console.WriteLine($"The first index of the word {word}: {first}");
Console.WriteLine($"The last index of the word {word}: {last}");

在此示例中,我们查找 is 单词的第一次和最后一次出现。

$ dotnet run
The first index of the word is: 6
The last index of the word is: 41

C# Regex Match

Regex 可用于执行更复杂的搜索操作。 C# 正则表达式教程 更详细地介绍了 C# 中的正则表达式。

MatchSuccess 属性返回一个布尔值,指示匹配是否成功。 NextMatch 方法返回一个新的 Match 对象,其中包含下一次匹配的结果,从上次匹配结束的位置开始。

可以在字符串中使用 MatchIndex 属性找到匹配项的位置。

Program.cs
using System.Text.RegularExpressions;

            var content = @"Foxes are omnivorous mammals belonging to several genera 
of the family Canidae. Foxes have a flattened skull, upright triangular ears, 
a pointed, slightly upturned snout, and a long bushy tail. Foxes live on every 
continent except Antarctica. By far the most common and widespread species of 
fox is the red fox.";

var rx = new Regex("fox(es)?", RegexOptions.Compiled |
    RegexOptions.IgnoreCase);

Match match = rx.Match(content);

while (match.Success)
{
    Console.WriteLine($"{match.Value} at index {match.Index}");
    match = match.NextMatch();
}

我们查找 fox 单词的所有出现情况。

var rx = new Regex("fox(es)?", RegexOptions.Compiled | 
    RegexOptions.IgnoreCase);

我们添加 (es)? 表达式以包含该单词的复数形式。 RegexOptions.IgnoreCase 在不区分大小写的模式下进行搜索。

Match match = rx.Match(content);

while (match.Success)
{
    Console.WriteLine($"{match.Value} at index {match.Index}");
    match = match.NextMatch();
}

Value 返回匹配的字符串,Index 返回它在文本中的索引。 NextMatch 方法查找下一个匹配项。

$ dotnet run
Foxes at index 0
Foxes at index 82
Foxes at index 198
fox at index 300
fox at index 315

来源

String 类 - 语言参考

在本文中,我们搜索了 C# 语言中的字符串。

作者

我的名字是 Jan Bodnar,我是一位充满热情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 C# 教程