C# 中的 IndexOfAny() 方法

2024 年 08 月 29 日 | 阅读 9 分钟

C# 中的 'System.String' 类包含 IndexOfAny() 方法,该方法用于获取给定字符串中指定字符数组中任意字符的第一次出现的索引。此方法提供了一种高效的方式来搜索字符串中的多个字符并确定它们的位置。

如果您需要获取某个子字符串的第一个实例的索引,请改用 IndexOfAny。IndexOfAny 方法提供了一种方便的方式来执行字符串处理中的条件检查,但重要的是要处理未找到匹配项的情况(即当该方法返回 -1 时)。

对于更高级的场景,例如在子字符串中搜索或指定起始索引,IndexOfAny 方法提供了带有附加参数的重载。

IndexOfAny() 的关键概念。

1. 搜索算法

IndexOfAny() 方法对字符串执行线性搜索,从头开始,直到找到指定数组中任意字符的第一个出现。如果数组中没有字符出现在字符串中,则返回 -1。否则,它返回找到字符的索引。

2. 单次出现

此方法用于返回第一次出现的索引。在包含给定数组中字符多次出现的字符串中,只返回第一个字符的索引。

3. 大小写敏感性

默认情况下,IndexOfAny() 通过使用大小写敏感性来区分大写和小写字符。如果需要不区分大小写的搜索,您可能需要使用 ToLower()ToUpper() 将字符串和字符转换为通用大小写。

4. 性能

与手动遍历字符串相比,IndexOfAny() 提供了一种相对高效的方式来检查字符串中是否存在多个字符。

I. IndexOfAny 方法 (Char[])

C# 中的 IndexOfAny 方法是 System.String 类的一部分,用于在字符串中搜索指定字符数组中任意字符的第一次出现。此方法返回第一次出现的索引,如果未找到指定字符,则返回 -1。

语法

它具有以下语法:

参数

anyOf:这是一个字符数组,用于在字符串中搜索。

返回值

从零开始的索引表示字符串的 anyOf 数组中哪个字符首先出现。

如果未找到匹配项,则返回 -1。

行为

  • IndexOfAny 方法从头到尾扫描整个字符串。
  • 它返回 anyOf 数组中任意字符在字符串中的第一次出现及其索引。
  • 该方法区分大写和小写字符,使搜索区分大小写。

用例

a. 字符集搜索

当您想在字符串中查找特定字符集中任意字符的第一次出现时,它非常有用。

b. 条件逻辑

它有助于根据字符串中是否存在某些字符来实现条件逻辑。

示例

让我们举一个例子来说明 C# 中的 IndexOfAny() 方法。

输出

The first occurrence found at index 1: 'o'

说明

1. 字符串定义

string str_1 = "God is Great!";: 它声明一个名为 str_1 的字符串变量,其文本为 "God is Great!"。

2. 字符数组

char[] chars_To_Search = { 'o', 'w', 'z' };: 它在名为 chars_To_Search 的字符数组中定义字符 "o"、"w" 和 "z"。我们希望在字符串中搜索这些字符。

3. IndexOfAny 方法

int index = str.IndexOfAny(chars_To_Search);: 它在字符串 str 上使用 IndexOfAny 方法查找 chars_To_Search 数组中任意字符的第一次出现的索引。

4. 结果处理

i. if (index != -1)

它检查是否找到了出现。如果未找到匹配项,IndexOfAny 方法返回 -1。

ii. if 块内部

它打印第一次出现索引处的字符和索引。

iii. else 块内部

如果在字符串中未找到出现,它会在控制台中显示一条消息。

在此示例中,代码在字符串“God is Great!”中查找字符“o”、“w”和“z”的第一次出现,并显示有关结果的信息。

II. IndexOfAny 方法 (Char[], Int32)

IndexOfAny() 方法使用当前实例中特定字符数组中任意字符的第一个实例的从零开始的索引。搜索从指定的字符位置开始。

语法

它具有以下语法:

参数

anyOf:这是一个字符数组。在此数组中,该方法搜索字符串中第一次出现的任何字符。

startIndex:这是字符串中搜索开始的起始索引。

行为

  • startIndex 用于开始搜索并继续到字符串的末尾。
  • IndexOfAny 方法返回给定范围内 anyOf 数组中任意字符的第一次出现的索引。
  • 大小写敏感性允许搜索区分大写和小写字符。

用例

a. 在某个位置之后搜索

如果您想在字符串中特定位置之后查找指定字符集中字符的第一次出现,则搜索功能很有用。

b. 子字符串搜索

它可用于在原始字符串的子字符串中进行搜索。

示例

让我们举一个例子来说明 C# 中的 IndexOfAny() (Char[], int32) 方法。

输出

The first occurrence found at index 7: 'G'

说明

1. 字符串定义

string str = "God is Great!";: 它声明一个名为 str 的字符串变量,其中包含文本“God is Great!”。

2. 字符数组

char[] charsToSearch = { 'm', 'g', 'G' };: 'm'、'g''G' 是将在字符串中搜索的字符。这些字符在名为 chars_To_Search 的数组中定义。

3. 起始索引

int startIndex = 5;: 它指定搜索的起始索引。此示例从第六个字符 ('i') 开始。

4. IndexOfAny 方法

int index = str.IndexOfAny(chars_To_Search, start_Index);: 它使用字符串 str 和 IndexOfAny 方法来获取 chars_To_Search 数组中指定 start_Index 之后的第一个字符的索引。

5. 结果处理

检查是否找到了出现 (index != -1) 并打印索引和在该索引处找到的字符。如果未找到出现,则打印一条消息,指示在指定索引之后未找到出现。

III. IndexOfAny 方法 (Char[], Int32, Int32)

此方法使用当前实例中指定字符数组中任意字符的第一次出现的从零开始的索引。搜索从指定的字符位置开始并检查多个字符位置。

语法

它具有以下语法:

参数

anyOf:这是一个字符数组,在字符串中搜索。

startIndex:这是字符串中搜索应开始的索引。

应计算搜索中的字符总数。

返回值

它返回数组中第一个出现的字符的从零开始的索引。

如果未找到匹配项,则返回 -1。

行为

  • 搜索从 startIndex 开始,并考虑字符计数,所有这些都在字符串的指定范围内。
  • IndexOfAny 方法返回给定范围内 anyOf 数组中找到的任意字符的第一次出现的索引。
  • 大写和小写字符通过大小写敏感搜索进行区分。

用例

a. 在子字符串中搜索

当您想在原始字符串的子字符串中查找特定字符集中任意字符的第一次出现时,它非常有用。

b. 有限搜索范围

它允许您在字符串的指定范围内而不是整个字符串中进行搜索。

示例

让我们举一个例子来说明 C# 中的 IndexOfAny() (Char[], int32, int32) 方法。

输出

The first occurrence found at index 12: 'o'

说明

1. 字符串定义

string str_1 = "The quick brown fox jumps over the lazy dog.";: 此行声明一个名为 'str_1' 的字符串变量,并用一个示例句子进行初始化。

2. 字符数组

char[] chars_To_Search = { 'o', 'x', 'g' };: 三个字符('o'、'x'、'g')将在文本中搜索,这些字符在名为 chars_To_Search 的数组中定义。

3. 搜索参数

int start_Index = 10;: 它表示字符串中搜索的起始索引。在此特定情况下,它从第十一个字符 ('q') 开始。

int count (20);: 它表示将用于搜索的最大字符数。在这里,它考虑从给定 start_Index 开始的 20 个字符。

4. IndexOfAny 方法

int index = str_1.IndexOfAny(chars_To_Search, start_Index, count);: 此行使用 IndexOfAny 方法确定 chars_To_Search 数组中在给定范围(start_Indexstart_Index + count - 1)内出现在字符串 str_1 中的第一个字符的索引。

5. 结果显示

之后,代码检查是否找到了出现 (index != -1) 并打印索引和在该索引处找到的字符。

如果未找到出现,则打印一条消息,指示在指定范围内未找到出现。

C# 中 IndexOfAny() 方法的优点

C# 中的 IndexOfAny() 方法有几个优点。IndexOfAny() 方法的一些主要优点如下:

1. 多功能性

IndexOfAny() 能够查找给定数组或字符串中的任何字符,使其具有多功能性。由于其多功能性,它可以应用于需要确定字符在字符数组中位置的各种情况。

2. 简洁性

获取给定集中任意字符的第一次出现的索引所需的代码最少这可以使代码更清晰、更易读。

3. 性能

在某些情况下,IndexOfAny() 的性能可能优于手动遍历字符串,尤其是在处理大型字符串时。

4. 效率

当您需要检查字符串中是否存在多个字符时,IndexOfAny() 比手动遍历字符串并单独检查每个字符更有效。

5. 简洁

该方法提供了一种简洁的方式来表达查找给定集中任意字符索引的意图,使代码更易读和可维护。

C# 中 IndexOfAny() 方法的缺点

C# 中的 IndexOfAny() 方法有几个缺点。IndexOfAny() 方法的一些主要缺点如下:

1. 匹配限制

IndexOfAny() 只搜索指定数组中任意字符的第一次出现。如果您需要查找所有出现或有更复杂的匹配要求,您可能需要使用其他方法或正则表达式。

2. 大小写敏感性

IndexOfAny() 默认使用大小写敏感方法。如果需要不区分大小写的搜索,这可能是一个缺点,因为它需要更多的转换或其他方法。

3. 字符集大小

IndexOfAny() 的性能会随着字符集的增加而降低,尤其是在处理大型字符串时。它需要遍历字符集才能找到匹配项。

4. 不适用于复杂模式

如果您需要搜索复杂模式或正则表达式,IndexOfAny() 不是最有效的方法。在某些情况下,正则表达式或字符串操作方法可能更合适。

5. 没有内置的起始索引

与其他一些字符串搜索方法不同,IndexOfAny() 没有用于指定搜索起始索引的内置参数。如果您需要从字符串中的特定位置开始搜索,则需要使用附加逻辑。

结论

总之,IndexOfAny() 是一个用于简单字符搜索的有用方法,但对于更复杂的要求,它有几个限制。根据您的特定用例,您可能需要考虑其他方法或将 IndexOfAny() 与附加逻辑结合使用。