CompareInfo.IndexOf Method (String, Char)
Searches for the specified character and returns the zero-based index of the first occurrence within the entire source string.
Namespace: System.Globalization
Assembly: mscorlib (in mscorlib.dll)
Parameters
- source
- Type: System.String
The string to search.
- value
- Type: System.Char
The character to locate within source.
Return Value
Type: System.Int32The zero-based index of the first occurrence of value, if found, within source; otherwise, -1. Returns 0 (zero) if value is an ignorable character.
| Exception | Condition |
|---|---|
| ArgumentNullException | source is null. |
This method searches the source string from the beginning of the string to the end of the string.
This overload performs a culture-sensitive search. If value represents a precomposed Unicode character, such as the ligature "Æ" (U+00C6), it might be considered equivalent to any occurrence of its components in the correct sequence, such as "AE" (U+0041, U+0045), depending on the culture. To perform an ordinal (culture-insensitive) search, where a character is considered equivalent to another character only if their Unicode code points are the same, you should call an overload that has a parameter of type CompareOptions and use the CompareOptions.Ordinal value. Unlike CompareInfo.IndexOf, which performs a culture-sensitive comparison, overloads of the String.IndexOf method that search for a character perform an ordinal comparison and overloads that search for a string perform a culture-sensitive comparison.
Note |
|---|
When possible, you should use string comparison methods that have a parameter of type CompareOptions to specify the kind of comparison expected. As a general rule, use linguistic options (using the current culture) for comparing strings displayed in the user interface and specify CompareOptions.Ordinal or CompareOptions.OrdinalIgnoreCase for security comparisons. |
Character sets include ignorable characters, which are characters that are not considered when performing a linguistic or culture-sensitive sort. In a culture-sensitive search, if value is an ignorable character, the result is equivalent to searching with that character removed. In this case, the IndexOf(String, Char) method always returns 0 (zero) to indicate that the match is found at the beginning of source. In the following example, the IndexOf(String, Char) method is used to find the soft hyphen (U+00AD) in two strings. Only one of the strings contains a soft hyphen. In both cases, because the soft hyphen is an ignorable character, the method returns 0 (zero) to indicate that it has found a match at the beginning of the string.
using System; using System.Globalization; public class Example { public static void Main() { CompareInfo ci = CultureInfo.CurrentCulture.CompareInfo; string s1 = "ani\u00ADmal"; string s2 = "animal"; // Find the index of the soft hyphen. Console.WriteLine(ci.IndexOf(s1, '\u00AD')); Console.WriteLine(ci.IndexOf(s2, '\u00AD')); } } // The example displays the following output: // 0 // 0
The following example determines the indexes of the first and last occurrences of a character or a substring within a string.
using System; using System.Globalization; public class SamplesCompareInfo { public static void Main() { // Creates CompareInfo for the InvariantCulture. CompareInfo myComp = CultureInfo.InvariantCulture.CompareInfo; // Searches for the ligature Æ. String myStr = "Is AE or ae the same as Æ or æ?"; Console.WriteLine(); Console.WriteLine( "No options : {0}", myStr ); PrintMarker( " AE : ", myComp.IndexOf( myStr, "AE" ), myComp.LastIndexOf( myStr, "AE" ) ); PrintMarker( " ae : ", myComp.IndexOf( myStr, "ae" ), myComp.LastIndexOf( myStr, "ae" ) ); PrintMarker( " Æ : ", myComp.IndexOf( myStr, 'Æ' ), myComp.LastIndexOf( myStr, 'Æ' ) ); PrintMarker( " æ : ", myComp.IndexOf( myStr, 'æ' ), myComp.LastIndexOf( myStr, 'æ' ) ); Console.WriteLine( "Ordinal : {0}", myStr ); PrintMarker( " AE : ", myComp.IndexOf( myStr, "AE", CompareOptions.Ordinal ), myComp.LastIndexOf( myStr, "AE", CompareOptions.Ordinal ) ); PrintMarker( " ae : ", myComp.IndexOf( myStr, "ae", CompareOptions.Ordinal ), myComp.LastIndexOf( myStr, "ae", CompareOptions.Ordinal ) ); PrintMarker( " Æ : ", myComp.IndexOf( myStr, 'Æ', CompareOptions.Ordinal ), myComp.LastIndexOf( myStr, 'Æ', CompareOptions.Ordinal ) ); PrintMarker( " æ : ", myComp.IndexOf( myStr, 'æ', CompareOptions.Ordinal ), myComp.LastIndexOf( myStr, 'æ', CompareOptions.Ordinal ) ); Console.WriteLine( "IgnoreCase : {0}", myStr ); PrintMarker( " AE : ", myComp.IndexOf( myStr, "AE", CompareOptions.IgnoreCase ), myComp.LastIndexOf( myStr, "AE", CompareOptions.IgnoreCase ) ); PrintMarker( " ae : ", myComp.IndexOf( myStr, "ae", CompareOptions.IgnoreCase ), myComp.LastIndexOf( myStr, "ae", CompareOptions.IgnoreCase ) ); PrintMarker( " Æ : ", myComp.IndexOf( myStr, 'Æ', CompareOptions.IgnoreCase ), myComp.LastIndexOf( myStr, 'Æ', CompareOptions.IgnoreCase ) ); PrintMarker( " æ : ", myComp.IndexOf( myStr, 'æ', CompareOptions.IgnoreCase ), myComp.LastIndexOf( myStr, 'æ', CompareOptions.IgnoreCase ) ); // Searches for the combining character sequence Latin capital letter U with diaeresis or Latin small letter u with diaeresis. myStr = "Is \u0055\u0308 or \u0075\u0308 the same as \u00DC or \u00FC?"; Console.WriteLine(); Console.WriteLine( "No options : {0}", myStr ); PrintMarker( " U\u0308 : ", myComp.IndexOf( myStr, "U\u0308" ), myComp.LastIndexOf( myStr, "U\u0308" ) ); PrintMarker( " u\u0308 : ", myComp.IndexOf( myStr, "u\u0308" ), myComp.LastIndexOf( myStr, "u\u0308" ) ); PrintMarker( " Ü : ", myComp.IndexOf( myStr, 'Ü' ), myComp.LastIndexOf( myStr, 'Ü' ) ); PrintMarker( " ü : ", myComp.IndexOf( myStr, 'ü' ), myComp.LastIndexOf( myStr, 'ü' ) ); Console.WriteLine( "Ordinal : {0}", myStr ); PrintMarker( " U\u0308 : ", myComp.IndexOf( myStr, "U\u0308", CompareOptions.Ordinal ), myComp.LastIndexOf( myStr, "U\u0308", CompareOptions.Ordinal ) ); PrintMarker( " u\u0308 : ", myComp.IndexOf( myStr, "u\u0308", CompareOptions.Ordinal ), myComp.LastIndexOf( myStr, "u\u0308", CompareOptions.Ordinal ) ); PrintMarker( " Ü : ", myComp.IndexOf( myStr, 'Ü', CompareOptions.Ordinal ), myComp.LastIndexOf( myStr, 'Ü', CompareOptions.Ordinal ) ); PrintMarker( " ü : ", myComp.IndexOf( myStr, 'ü', CompareOptions.Ordinal ), myComp.LastIndexOf( myStr, 'ü', CompareOptions.Ordinal ) ); Console.WriteLine( "IgnoreCase : {0}", myStr ); PrintMarker( " U\u0308 : ", myComp.IndexOf( myStr, "U\u0308", CompareOptions.IgnoreCase ), myComp.LastIndexOf( myStr, "U\u0308", CompareOptions.IgnoreCase ) ); PrintMarker( " u\u0308 : ", myComp.IndexOf( myStr, "u\u0308", CompareOptions.IgnoreCase ), myComp.LastIndexOf( myStr, "u\u0308", CompareOptions.IgnoreCase ) ); PrintMarker( " Ü : ", myComp.IndexOf( myStr, 'Ü', CompareOptions.IgnoreCase ), myComp.LastIndexOf( myStr, 'Ü', CompareOptions.IgnoreCase ) ); PrintMarker( " ü : ", myComp.IndexOf( myStr, 'ü', CompareOptions.IgnoreCase ), myComp.LastIndexOf( myStr, 'ü', CompareOptions.IgnoreCase ) ); } public static void PrintMarker( String Prefix, int First, int Last ) { // Determines the size of the array to create. int mySize; if ( Last > First ) mySize = Last; else mySize = First; if ( mySize > -1 ) { // Creates an array of Char to hold the markers. Char[] myCharArr = new Char[mySize+1]; // Inserts the appropriate markers. if ( First > -1 ) myCharArr[First] = 'f'; if ( Last > -1 ) myCharArr[Last] = 'l'; if ( First == Last ) myCharArr[First] = 'b'; // Displays the array of Char as a String. Console.WriteLine( "{0}{1}", Prefix, new String( myCharArr ) ); } else Console.WriteLine( Prefix ); } } /* This code produces the following output. No options : Is AE or ae the same as Æ or æ? AE : f l ae : f l Æ : f l æ : f l Ordinal : Is AE or ae the same as Æ or æ? AE : b ae : b Æ : b æ : b IgnoreCase : Is AE or ae the same as Æ or æ? AE : f l ae : f l Æ : f l æ : f l No options : Is U" or u" the same as Ü or ü? U" : f l u" : f l Ü : f l ü : f l Ordinal : Is U" or u" the same as Ü or ü? U" : b u" : b Ü : b ü : b IgnoreCase : Is U" or u" the same as Ü or ü? U" : f l u" : f l Ü : f l ü : f l */
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Note