CompareInfo.IndexOf Method (String, String, Int32, Int32)
[ This article is for Windows Phone 8 developers. If you’re developing for Windows 10, see the latest documentation. ]
Searches for the specified substring and returns the zero-based index of the first occurrence within the section of the source string that starts at the specified index and contains the specified number of elements.
Assembly: mscorlib (in mscorlib.dll)
'Declaration Public Overridable Function IndexOf ( _ source As String, _ value As String, _ startIndex As Integer, _ count As Integer _ ) As Integer
Parameters
- source
- Type: System.String
The string to search.
- value
- Type: System.String
The string to locate within source.
- startIndex
- Type: System.Int32
The zero-based starting index of the search.
- count
- Type: System.Int32
The number of elements in the section to search.
Return Value
Type: System.Int32The zero-based index of the first occurrence of value within the section of source that starts at startIndex and contains the number of elements specified by count, if found; otherwise, -1.
| Exception | Condition |
|---|---|
| ArgumentNullException | source is Nothing. -or- value is Nothing. |
| ArgumentOutOfRangeException | startIndex is outside the range of valid indexes for source. -or- count is less than zero. -or- startIndex and count do not specify a valid section in source. |
The source string is searched forward starting at startIndex and ending at startIndex + count - 1.
This overload performs a culture-sensitive search. A Unicode value representing a precomposed character, such as the ligature "Æ" (U+00C6), might be considered equivalent to any occurrence of the character's components in the correct sequence, such as "AE" (U+0041, U+0045), depending on the culture. To perform an ordinal (culture-insensitive) search, where the Unicode values are compared, the application should use one of the overloads that accepts a CompareOptions value as a parameter and use the Ordinal value.
The following example determines the indexes of the first and last occurrences of a character or a substring within a portion of a string.
Imports System.Globalization Public Class Example Public Shared Sub Demo(ByVal outputBlock As System.Windows.Controls.TextBlock) ' Creates CompareInfo for the InvariantCulture. Dim myComp As CompareInfo = CultureInfo.InvariantCulture.CompareInfo ' iS is the starting index of the substring. Dim [iS] As Integer = 8 ' iL is the length of the substring. Dim iL As Integer = 18 ' myT1 and myT2 are the strings used for padding. Dim myT1 As New [String]("-"c, [iS]) Dim myT2 As [String] ' Searches for the ligature Æ. Dim myStr As [String] = "Is AE or ae the same as Æ or æ?" myT2 = New [String]("-"c, myStr.Length - [iS] - iL) outputBlock.Text &= vbCrLf outputBlock.Text += String.Format("Original : {0}", myStr) & vbCrLf outputBlock.Text += String.Format("No options : {0}{1}{2}", myT1, myStr.Substring([iS], iL), myT2) & vbCrLf PrintMarker(outputBlock, " AE : ", myComp.IndexOf(myStr, "AE", [iS], iL), myComp.LastIndexOf(myStr, "AE", [iS] + iL - 1, iL)) PrintMarker(outputBlock, " ae : ", myComp.IndexOf(myStr, "ae", [iS], iL), myComp.LastIndexOf(myStr, "ae", [iS] + iL - 1, iL)) PrintMarker(outputBlock, " Æ : ", myComp.IndexOf(myStr, "Æ"c, [iS], iL), myComp.LastIndexOf(myStr, "Æ"c, [iS] + iL - 1, iL)) PrintMarker(outputBlock, " æ : ", myComp.IndexOf(myStr, "æ"c, [iS], iL), myComp.LastIndexOf(myStr, "æ"c, [iS] + iL - 1, iL)) outputBlock.Text += String.Format("Ordinal : {0}{1}{2}", myT1, myStr.Substring([iS], iL), myT2) & vbCrLf PrintMarker(outputBlock, " AE : ", myComp.IndexOf(myStr, "AE", [iS], iL, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "AE", [iS] + iL - 1, iL, CompareOptions.Ordinal)) PrintMarker(outputBlock, " ae : ", myComp.IndexOf(myStr, "ae", [iS], iL, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "ae", [iS] + iL - 1, iL, CompareOptions.Ordinal)) PrintMarker(outputBlock, " Æ : ", myComp.IndexOf(myStr, "Æ"c, [iS], iL, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "Æ"c, [iS] + iL - 1, iL, CompareOptions.Ordinal)) PrintMarker(outputBlock, " æ : ", myComp.IndexOf(myStr, "æ"c, [iS], iL, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "æ"c, [iS] + iL - 1, iL, CompareOptions.Ordinal)) outputBlock.Text += String.Format("IgnoreCase : {0}{1}{2}", myT1, myStr.Substring([iS], iL), myT2) & vbCrLf PrintMarker(outputBlock, " AE : ", myComp.IndexOf(myStr, "AE", [iS], iL, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "AE", [iS] + iL - 1, iL, CompareOptions.IgnoreCase)) PrintMarker(outputBlock, " ae : ", myComp.IndexOf(myStr, "ae", [iS], iL, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "ae", [iS] + iL - 1, iL, CompareOptions.IgnoreCase)) PrintMarker(outputBlock, " Æ : ", myComp.IndexOf(myStr, "Æ"c, [iS], iL, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "Æ"c, [iS] + iL - 1, iL, CompareOptions.IgnoreCase)) PrintMarker(outputBlock, " æ : ", myComp.IndexOf(myStr, "æ"c, [iS], iL, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "æ"c, [iS] + iL - 1, iL, CompareOptions.IgnoreCase)) ' Searches for the combining character sequence Latin capital letter U with diaeresis or Latin small letter u with diaeresis. myStr = "Is " & ChrW(&H55) & ChrW(&H308) & " or " & ChrW(&H75) & ChrW(&H308) & " the same as " & ChrW(&HDC) & " or " & ChrW(&HFC) & "?" myT2 = New [String]("-"c, myStr.Length - [iS] - iL) outputBlock.Text &= vbCrLf outputBlock.Text += String.Format("Original : {0}", myStr) & vbCrLf outputBlock.Text += String.Format("No options : {0}{1}{2}", myT1, myStr.Substring([iS], iL), myT2) & vbCrLf PrintMarker(outputBlock, " U" & ChrW(&H308) & " : ", myComp.IndexOf(myStr, "U" & ChrW(&H308), [iS], iL), myComp.LastIndexOf(myStr, "U" & ChrW(&H308), [iS] + iL - 1, iL)) PrintMarker(outputBlock, " u" & ChrW(&H308) & " : ", myComp.IndexOf(myStr, "u" & ChrW(&H308), [iS], iL), myComp.LastIndexOf(myStr, "u" & ChrW(&H308), [iS] + iL - 1, iL)) PrintMarker(outputBlock, " Ü : ", myComp.IndexOf(myStr, "Ü"c, [iS], iL), myComp.LastIndexOf(myStr, "Ü"c, [iS] + iL - 1, iL)) PrintMarker(outputBlock, " ü : ", myComp.IndexOf(myStr, "ü"c, [iS], iL), myComp.LastIndexOf(myStr, "ü"c, [iS] + iL - 1, iL)) outputBlock.Text += String.Format("Ordinal : {0}{1}{2}", myT1, myStr.Substring([iS], iL), myT2) & vbCrLf PrintMarker(outputBlock, " U" & ChrW(&H308) & " : ", myComp.IndexOf(myStr, "U" & ChrW(&H308), [iS], iL, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "U" & ChrW(&H308), [iS] + iL - 1, iL, CompareOptions.Ordinal)) PrintMarker(outputBlock, " u" & ChrW(&H308) & " : ", myComp.IndexOf(myStr, "u" & ChrW(&H308), [iS], iL, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "u" & ChrW(&H308), [iS] + iL - 1, iL, CompareOptions.Ordinal)) PrintMarker(outputBlock, " Ü : ", myComp.IndexOf(myStr, "Ü"c, [iS], iL, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "Ü"c, [iS] + iL - 1, iL, CompareOptions.Ordinal)) PrintMarker(outputBlock, " ü : ", myComp.IndexOf(myStr, "ü"c, [iS], iL, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "ü"c, [iS] + iL - 1, iL, CompareOptions.Ordinal)) outputBlock.Text += String.Format("IgnoreCase : {0}{1}{2}", myT1, myStr.Substring([iS], iL), myT2) & vbCrLf PrintMarker(outputBlock, " U" & ChrW(&H308) & " : ", myComp.IndexOf(myStr, "U" & ChrW(&H308), [iS], iL, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "U" & ChrW(&H308), [iS] + iL - 1, iL, CompareOptions.IgnoreCase)) PrintMarker(outputBlock, " u" & ChrW(&H308) & " : ", myComp.IndexOf(myStr, "u" & ChrW(&H308), [iS], iL, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "u" & ChrW(&H308), [iS] + iL - 1, iL, CompareOptions.IgnoreCase)) PrintMarker(outputBlock, " Ü : ", myComp.IndexOf(myStr, "Ü"c, [iS], iL, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "Ü"c, [iS] + iL - 1, iL, CompareOptions.IgnoreCase)) PrintMarker(outputBlock, " ü : ", myComp.IndexOf(myStr, "ü"c, [iS], iL, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "ü"c, [iS] + iL - 1, iL, CompareOptions.IgnoreCase)) End Sub 'Main Public Shared Sub PrintMarker(ByVal outputBlock As System.Windows.Controls.TextBlock, ByVal Prefix As [String], ByVal First As Integer, ByVal 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. outputBlock.Text += String.Format("{0}{1}", Prefix, New [String](myCharArr)) & vbCrLf Else outputBlock.Text &= Prefix & vbCrLf End If End Sub 'PrintMarker End Class 'SamplesCompareInfo 'This code produces the following output. ' 'Original : Is AE or ae the same as Æ or æ? 'No options : -------- ae the same as Æ ----- ' AE : b ' ae : b ' Æ : b ' æ : b 'Ordinal : -------- ae the same as Æ ----- ' AE : ' ae : b ' Æ : b ' æ : 'IgnoreCase : -------- ae the same as Æ ----- ' AE : f l ' ae : f l ' Æ : f l ' æ : f l ' 'Original : Is U" or u" the same as Ü or ü? 'No options : -------- u" the same as Ü ----- ' U" : b ' u" : b ' Ü : b ' ü : b 'Ordinal : -------- u" the same as Ü ----- ' U" : ' u" : b ' Ü : b ' ü : 'IgnoreCase : -------- u" the same as Ü ----- ' U" : f l ' u" : f l ' Ü : f l ' ü : f l