Home
Search
VB.NET IndexOf FunctionCall the IndexOf Function. IndexOf returns the index of a substring as an Integer.
dot net perls
IndexOf. This function returns the index of a substring. First it scans the String. And if the substring is not found, it returns -1.
String function. A helpful function, IndexOf is part of the .NET Framework's base class library. It is often useful. But there are some tricks to using it correctly.
An example. First, here we locate the first index of a String in a source String. We search for the location of "dog" with the IndexOf function.
Part 1 We call IndexOf to search for a substring. The string "dog" is found in the input String, at index 4.
Part 2 If the string is not found, the result is -1. Often this is an important thing to test.
VB.NET program that uses IndexOf
Module Module1 Sub Main() Dim animals As String = "cat,dog" ' Part 1: print index of dog. Console.WriteLine(animals.IndexOf("dog")) ' Part 2: call IndexOf on value not present. If animals.IndexOf("frog") = -1 Then Console.WriteLine("?") End If End Sub End Module
4 ?
Loop. Sometimes we need to locate the first index of a String, and then continue locating further instances. We can do this with a Do While construct and IndexOf().
Info The program first declares a String, which contains the letter "t" in 2 places. Next, it calls IndexOf on the String.
Info The Do While loop continues until IndexOf returns-1. If the letter never occurs, the loop body will never be entered.
VB.NET program that uses IndexOf, While
Module Module1 Sub Main() ' The input String. Dim s As String = "dotnet" ' The iteration variable. Dim i As Integer = s.IndexOf("t"c) ' Loop over the found indexes. Do While (i <> -1) ' Write the substring. Console.WriteLine(s.Substring(i)) ' Get next index. i = s.IndexOf("t"c, i + 1) Loop End Sub End Module
tnet t
Return value. IndexOf returns -1, a special value, when no result is found. Otherwise, it returns the index of the string that is found within the source string.
VB.NET program that shows IndexOf results
Module Module1 Sub Main() Dim source As String = "orange cat" ' See IndexOf function results. Console.WriteLine("NOT FOUND: {0}", source.IndexOf("dog")) Console.WriteLine("FOUND: {0}", source.IndexOf("cat")) End Sub End Module
NOT FOUND: -1 FOUND: 7
IndexOf, Substring. Here we use the Substring function with the result of IndexOf. The IndexOf call here locates the first index of the uppercase letter B in the source string.
Substring
VB.NET program that uses Substring
Module Module1 Sub Main() ' The string you are searching. Dim s As String = "Visual Basic rocks" ' Find index of uppercase letter B. Dim i As Integer = s.IndexOf("B"c) ' This new string contains the substring starting at B. Dim part As String = s.Substring(i) Console.WriteLine(part) Console.ReadLine() End Sub End Module
Basic rocks
Benchmark, Char. Often we can use a Char instead of a one-character String. In some cases, the character overload is many times faster. It will return an equivalent value.
Version 1 In this version of the code, we pass a Char to IndexOf and test the result value against-1.
Version 2 This code uses a single-character string as the argument. The end result is the same as version 1, but the performance is worse.
Result It is much faster to search for a Char, not a 1-letter String. This optimization can help many programs.
Benchmarks
VB.NET program that benchmarks IndexOf, Char and String
Module Module1 Sub Main() Dim letters As String = "abcdef" Dim m As Integer = 10000000 ' Version 1: use char argument with IndexOf. Dim s1 As Stopwatch = Stopwatch.StartNew For i As Integer = 0 To m - 1 If letters.IndexOf("f"c) = -1 Then Return End If Next s1.Stop() ' Version 2: use string argument with IndexOf. Dim s2 As Stopwatch = Stopwatch.StartNew For i As Integer = 0 To m - 1 If letters.IndexOf("f") = -1 Then Return End If Next s2.Stop() Dim u As Integer = 1000000 Console.WriteLine(((s1.Elapsed.TotalMilliseconds * u) / m).ToString("0.00 ns")) Console.WriteLine(((s2.Elapsed.TotalMilliseconds * u) / m).ToString("0.00 ns")) End Sub End Module
4.98 ns IndexOf(Char) 126.90 ns IndexOf(String)
IndexOfAny. This receives an array of Chars as the argument. It then returns the index of the first one found. This is a way to simplify a search for multiple values.
Char Array
If The result value from IndexOfAny should be checked for -1 each time it is called. Use an If-statement.
If Then
Tip Always check for -1, because many times using -1 elsewhere in your application will cause an error. It represents a not-found result.
Warning The -1 value returned by IndexOf and methods such as IndexOfAny has caused countless bugs.
VB.NET program that uses IndexOfAny
Module Module1 Sub Main() ' The input String. Dim s1 As String = "The cat is hungry." ' Find the first index of either "x" or "n" Dim i1 As Integer = s1.IndexOfAny(New Char() {"x"c, "n"c}) If (i1 <> -1) Then Console.WriteLine(s1.Substring(i1)) End If ' Another input String. Dim s2 As String = "C# is challenging." ' Find the first index of either '#' or ' ' Dim i2 As Integer = s2.IndexOfAny(New Char() {"#"c, " "c}) If (i2 <> -1) Then Console.WriteLine(s2.Substring(i2)) End If Console.ReadLine() End Sub End Module
ngry. # is challenging.
Notes, IndexofAny. The IndexOfAny function loops over an array. Because it only searches for any match, it can use an early-exit (Exit For) to stop looping when a match is found.
Info IndexOfAny can be seen as an optimized series of calls to IndexOf. We could duplicate its results by repeatedly calling IndexOf.
Functions. There are four functions in the IndexOf family available in VB.NET. Often we only need the first (IndexOf). But the others are occasionally valuable.
IndexOf This finds the first index of a Char or String. You can specify start and ending indexes of where you want to search.
IndexOfAny This function finds the first index of any of the characters in the Array you send it.
LastIndexOf This starts searching from the end. It is the same as IndexOf in all other ways.
LastIndexOf
LastIndexOfAny This finds the last index of any of the characters in the Array it receives.
Contains. This System.String Function calls IndexOf internally. We should only use it if we want a different value (False) to indicate failure.
Contains
Contains Result when substring exists: True. Result when substring does NOT exist: False.
IndexOf Result when substring exists: >= 0. Result when substring does NOT exist: -1.
Array.IndexOf. A separate IndexOf method exists on the Array class. This method is shared, so we access it as "Array.IndexOf." It works in a similar way as the string IndexOf method.
Array.IndexOf
Several examples. We covered several examples of using the IndexOf Function. We used IndexOf with Strings and Chars. Next we called it in a Do-While loop.
Char
While, Do While
A summary. We checked IndexOf's result, which is negative one if the argument is not found. This function can simplify a program. It can replace many For-loops that search strings.
Home
© 2007-2021 sam allen. send bug reports to info@dotnetperls.com.