C# indexof和indexofany区别(转)
定位子串是指在一个字符串中寻找其中包含的子串或者某个字符。在String类中,常用的定位子串和字符的方法包括IndexOf/LastIndexOf及IndexOfAny/LastIndexOfAny,下面进行详细介绍。
1.IndexOf/LastIndexOf
IndexOf方法用于搜索在一个字符串中,某个特定的字符或者子串第一次出现的位置,该方法区分大小写,并从字符串的首字符开始以0计数。如果字符串中不包含这个字符或子串,则返回-1。常用的重载形式如下所示。
(1)定位字符:
int IndexOf(char value)
int IndexOf(char value, int startIndex)
int IndexOf(char value, int startIndex, int count)
(2)定位子串:
int IndexOf(string value)
int IndexOf(string value, int startIndex)
int IndexOf(string value, int startIndex, int count)
在上述重载形式中,其参数含义如下:
value:待定位的字符或者子串。
startIndex:在总串中开始搜索的其实位置。
count:在总串中从起始位置开始搜索的字符数。
下面的代码在“Hello”中寻找字符‘l’第一次出现的位置。
代码4-7 使用IndexOf寻找字符第一次出现位置:Default.aspx.cs
1. String s=”Hello”;
2. int I = s.IndexOf(‘l’)); //2
同IndexOf类似,LastIndexOf用于搜索在一个字符串中,某个特定的字符或者子串最后一次出现的位置,其方法定义和返回值都与IndexOf相同,不再赘述。
2.IndexOfAny/LastIndexOfAny
IndexOfAny方法功能同IndexOf类似,区别在于,它可以搜索在一个字符串中,出现在一个字符数组中的任意字符第一次出现的位置。同样,该方法区分大小写,并从字符串的首字符开始以0计数。如果字符串中不包含这个字符或子串,则返回-1。常用的IndexOfAny重载形式有3种:
(1)int IndexOfAny(char[]anyOf);
(2)int IndexOfAny(char[]anyOf, int startIndex);
(3)int IndexOfAny(char[]anyOf, int startIndex, int count)。
在上述重载形式中,其参数含义如下:
(1)anyOf:待定位的字符数组,方法将返回这个数组中任意一个字符第一次出现的位置。
(2)startIndex:在原字符串中开始搜索的起始位置。
(3)count:在原字符串中从起始位置开始搜索的字符数。
下例在“Hello”中寻找字符‘l’第一次和最后一次出现的位置。
代码4-8 使用IndexOfAny寻找子串第一次和最后一次出现位置:Default.aspx.cs
1. String s = “Hello”;
2. char[] anyOf={'H','e','l'};
3. int i1 = s.IndexOfAny(anyOf)); //0
4. int i2 = s.LastIndexOfAny(anyOf)); //3
同IndexOfAny类似,LastIndexOfAny用于搜索在一个字符串中,出现在一个字符数组中任意字符最后一次出现的位置。
------------------------------------------------------------------------------
string str = "liminandlxf";
//从str第0个字符起,查找8个字符,
//查找“and”在字符串STR中的位置[从第一个字符算起]注意:start+end不能大于str的长度
//即在str中从第0个字符开始取8个字符得到liminand,然后在这个里面查找and的开始位置
int Pos = str.IndexOf("and", 0,8); //返回5
Pos = str.IndexOf("and", 0, 7); //返回-1
MessageBox.Show(Pos.ToString());
--------------------------------------------------------------------------------
string str = "liminandlxf";
char[] anyof = { 'l', 'a', 'f' };
//查找anyof字符数组中的任意字符在str中第一次出现的位置
int pos = str.IndexOfAny(anyof);
//返回0,第一个出现的是l
MessageBox.Show(pos.ToString());
int pos2 = str.LastIndexOfAny(anyof); //返回10,查找在anyof字符数组中的任意字符
//在字符串str中最后出现的位置
MessageBox.Show(pos2.ToString());