CompareInfo.LastIndexOf Method (String, Char)
Searches for the specified character and returns the zero-based index of the last occurrence within the entire source string.
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 last occurrence of value, if found, within source; otherwise, -1.
| Exception | Condition |
|---|---|
| ArgumentNullException | source is null. |
The source string is searched backward starting at the end of the string and ending at the beginning of the string.
This overload performs a culture-sensitive search. If the character is a Unicode value representing a precomposed 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 the Unicode values are the same, you should call one of the overloads that has a parameter of type CompareOptions and use the Ordinal value. Overloads of String.LastIndexOf that search for a character perform an ordinal search, whereas those that search for a string perform a culture-sensitive search.
Note |
|---|
When possible, you should call 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. |
Notes to Callers:
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 LastIndexOf(String, Char) method always returns the last index position in source to indicate that the match is found at the end of source. In the following example, the LastIndexOf(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 the last index position in the string to indicate that it has found a match at the end of the string.
Imports System.Globalization Module Example Public Sub Main() Dim ci As CompareInfo = CultureInfo.CurrentCulture.CompareInfo Dim softHyphen As Char = ChrW(&h00AD) Dim s1 As String = "ani" + softHyphen + "mal" Dim s2 As String = "animal" ' Find the index of the last soft hyphen. Console.WriteLine(ci.LastIndexOf(s1, softHyphen)) Console.WriteLine(ci.LastIndexOf(s2, softHyphen)) End Sub End Module ' The example displays the following output: ' 6 ' 5
The following example determines the indexes of the first and last occurrences of a character or a substring within a string.
Imports System Imports System.Globalization Imports Microsoft.VisualBasic Public Class SamplesCompareInfo Public Shared Sub Main() ' Creates CompareInfo for the InvariantCulture. Dim myComp As CompareInfo = CultureInfo.InvariantCulture.CompareInfo ' Searches for the ligature Æ. Dim myStr As [String] = "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, "Æ"c), myComp.LastIndexOf(myStr, "Æ"c)) PrintMarker(" æ : ", myComp.IndexOf(myStr, "æ"c), myComp.LastIndexOf(myStr, "æ"c)) 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, "Æ"c, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "Æ"c, CompareOptions.Ordinal)) PrintMarker(" æ : ", myComp.IndexOf(myStr, "æ"c, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "æ"c, 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, "Æ"c, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "Æ"c, CompareOptions.IgnoreCase)) PrintMarker(" æ : ", myComp.IndexOf(myStr, "æ"c, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "æ"c, CompareOptions.IgnoreCase)) ' Searches for the combining character sequence Latin capital letter U with diaeresis or Latin small letter u with diaeresis. myStr = "Is " & ChrW(&H0055) & ChrW(&H0308) & " or " & ChrW(&H0075) & ChrW(&H0308) & " the same as " & ChrW(&H00DC) & " or " & ChrW(&H00FC) & "?" Console.WriteLine() Console.WriteLine("No options : {0}", myStr) PrintMarker(" U" & ChrW(&H0308) & " : ", myComp.IndexOf(myStr, "U" & ChrW(&H0308)), myComp.LastIndexOf(myStr, "U" & ChrW(&H0308))) PrintMarker(" u" & ChrW(&H0308) & " : ", myComp.IndexOf(myStr, "u" & ChrW(&H0308)), myComp.LastIndexOf(myStr, "u" & ChrW(&H0308))) PrintMarker(" Ü : ", myComp.IndexOf(myStr, "Ü"c), myComp.LastIndexOf(myStr, "Ü"c)) PrintMarker(" ü : ", myComp.IndexOf(myStr, "ü"c), myComp.LastIndexOf(myStr, "ü"c)) Console.WriteLine("Ordinal : {0}", myStr) PrintMarker(" U" & ChrW(&H0308) & " : ", myComp.IndexOf(myStr, "U" & ChrW(&H0308), CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "U" & ChrW(&H0308), CompareOptions.Ordinal)) PrintMarker(" u" & ChrW(&H0308) & " : ", myComp.IndexOf(myStr, "u" & ChrW(&H0308), CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "u" & ChrW(&H0308), CompareOptions.Ordinal)) PrintMarker(" Ü : ", myComp.IndexOf(myStr, "Ü"c, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "Ü"c, CompareOptions.Ordinal)) PrintMarker(" ü : ", myComp.IndexOf(myStr, "ü"c, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "ü"c, CompareOptions.Ordinal)) Console.WriteLine("IgnoreCase : {0}", myStr) PrintMarker(" U" & ChrW(&H0308) & " : ", myComp.IndexOf(myStr, "U" & ChrW(&H0308), CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "U" & ChrW(&H0308), CompareOptions.IgnoreCase)) PrintMarker(" u" & ChrW(&H0308) & " : ", myComp.IndexOf(myStr, "u" & ChrW(&H0308), CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "u" & ChrW(&H0308), CompareOptions.IgnoreCase)) PrintMarker(" Ü : ", myComp.IndexOf(myStr, "Ü"c, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "Ü"c, CompareOptions.IgnoreCase)) PrintMarker(" ü : ", myComp.IndexOf(myStr, "ü"c, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "ü"c, CompareOptions.IgnoreCase)) End Sub 'Main Public Shared Sub PrintMarker(Prefix As [String], First As Integer, Last As Integer) ' Determines the size of the array to create. Dim mySize As Integer If Last > First Then mySize = Last Else mySize = First End If If mySize > - 1 Then ' Creates an array of Char to hold the markers. Dim myCharArr(mySize + 1) As [Char] ' Inserts the appropriate markers. If First > - 1 Then myCharArr(First) = "f"c End If If Last > - 1 Then myCharArr(Last) = "l"c End If If First = Last Then myCharArr(First) = "b"c End If ' Displays the array of Char as a String. Console.WriteLine("{0}{1}", Prefix, New [String](myCharArr)) Else Console.WriteLine(Prefix) End If End Sub 'PrintMarker End Class 'SamplesCompareInfo '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
Available since 8
.NET Framework
Available since 1.1
Portable Class Library
Supported in: portable .NET platforms
Silverlight
Available since 2.0
Windows Phone Silverlight
Available since 7.0
Windows Phone
Available since 8.1
