C# String.IndexOf()方法: 查找指定的子字符串在字符串中的位置

  • Post category:C#

C#的String.IndexOf()方法

IndexOf() 方法用来在字符串中查找指定字符或字符串的索引(位置),如果找到了则返回其第一个出现的位置索引,否则返回 -1。

该方法定义在 System.String 类中,具有以下几个重载:

public int IndexOf(string value);
public int IndexOf(char value);
public int IndexOf(string value, int startIndex);
public int IndexOf(char value, int startIndex);

其中,前两者在字符串中查找特定的字符或字符串,并返回它的位置索引,startIndex 表示查找的起始位置索引;后两个方法除了需要指定查找的起始位置索引外,还可以在多个起始的位置中找到第一个匹配的字符或字符串。

该方法是一个基础的文本操作,经常应用于字符串的查找和处理,对于程序员而言,特别是在字符串处理和搜索时非常有用。下面将详细介绍 IndexOf() 方法的用法和示例。

使用方法

假设我们有一个字符串 source,我们想查找其中的子字符串 subStr 的位置,可以使用以下语句:

int index = source.IndexOf(subStr);

如果 subStr 存在于 source ,则 index 将为第一个匹配到的索引位置,否则返回 -1。

如果我们想从字符串的某一位置开始查找,可以提供一个起始索引:

int startIndex = 3;
int index = source.IndexOf(subStr, startIndex);

如果要查找其中一个字符,同样也可以使用 IndexOf() 方法,只不过需要将字符转换为字符串:

char c = 'a';
int index = source.IndexOf(c.ToString());

在下面的实例中,我们将使用 IndexOf() 方法来查找包含特定字串的字符串。例如下面的方法查找所有包含子字符串 abc 的字符串。

示例

static void FindSubStr()
{
    string[] strings = new string[] { "abc11", "11abc", "12abc", "cba11" };
    string subStr = "abc";

    Console.WriteLine($"所有含有 {subStr} 的字符串的索引位置如下:");

    int idx = -1;

    do
    {
        // 从下一个位置开始查找 subStr 字符串
        idx = strings[idx + 1].IndexOf(subStr, idx + 1);

        if (idx != -1)
        {
            Console.WriteLine($"字符串 \"{strings[idx]}\" 含有 \"{subStr}\",索引位置为 {idx}");
        }
    } 
    while (idx != -1);    
}

上述示例中,我们定义一个字符串数组 strings ,其中包含若干个元素。然后定义了一个子字符串 subStr,我们使用 IndexOf() 方法在 strings 数组中逐一查找具有 subStr 的字符串,并输出它们的位置索引。

下面是另一个示例,它查找字符串中的某个字符,如果该字符存在,则返回它的位置。

static void FindChar()
{
    string str = "Hello, world!";
    char c = 'o';

    int idx = str.IndexOf(c.ToString());

    if (idx != -1)
    {
        Console.WriteLine($"字符 {c} 在字符串中的位置索引为 {idx}");
    }
    else
    {
        Console.WriteLine($"字符 {c} 不存在于字符串中");
    }
}

在上述示例中,我们声明了一个字符串变量 str 和字符变量 c,然后使用 IndexOf() 方法查找 c 的位置索引,并将其打印到控制台。