Skip to main content
.NET Framework Class Library
StringLastIndexOf Method (String)

Reports the zero-based index position of the last occurrence of a specified string within this instance.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)
Syntax
Public Function LastIndexOf ( _
	value As [%$TOPIC/1wdsy8fy_en-us_VS_110_1_0_0_0_0%] _
) As [%$TOPIC/1wdsy8fy_en-us_VS_110_1_0_0_0_1%]
public [%$TOPIC/1wdsy8fy_en-us_VS_110_1_0_1_0_0%] LastIndexOf(
	[%$TOPIC/1wdsy8fy_en-us_VS_110_1_0_1_0_1%] value
)
public:
[%$TOPIC/1wdsy8fy_en-us_VS_110_1_0_2_0_0%] LastIndexOf(
	[%$TOPIC/1wdsy8fy_en-us_VS_110_1_0_2_0_1%]^ value
)
member LastIndexOf : 
        value:[%$TOPIC/1wdsy8fy_en-us_VS_110_1_0_3_0_0%] -> [%$TOPIC/1wdsy8fy_en-us_VS_110_1_0_3_0_1%]
public function LastIndexOf(
	value : [%$TOPIC/1wdsy8fy_en-us_VS_110_1_0_4_0_0%]
) : [%$TOPIC/1wdsy8fy_en-us_VS_110_1_0_4_0_1%]

Parameters

value
Type: SystemString

The string to seek.

Return Value

Type: SystemInt32
The zero-based starting index position of value if that string is found, or -1 if it is not. If value is StringEmpty, the return value is the last index position in this instance.
Exceptions
ExceptionCondition
ArgumentNullException

value is .

Remarks

Index numbering starts from zero. That is, the first character in the string is at index zero and the last is at Length - 1.

The search begins at the last character position of this instance and proceeds backward toward the beginning until either value is found or the first character position has been examined.

This method performs a word (case-sensitive and culture-sensitive) search using the current culture.

Character sets include ignorable characters, which are characters that are not considered when performing a linguistic or culture-sensitive comparison. In a culture-sensitive search, if value contains an ignorable character, the result is equivalent to searching with that character removed. If value consists only of one or more ignorable characters, the LastIndexOf(String) method always returns StringLength – 1, which represents the last index position in the current instance. In the following example, the LastIndexOf(String) method is used to find three substrings (a soft hyphen (U+00AD), a soft hyphen followed by "n", and a soft hyphen followed by "m") in two strings. Only one of the strings contains a soft hyphen. If the example is run on the .NET Framework 4 or later, in each case, because the soft hyphen is an ignorable character, the result is the same as if the soft hyphen had not been included in value. When searching for a soft hyphen only, the method returns 6 and 5. These values correspond to the index of the last character in the two strings.

Module Example
   Public Sub Main()
      Dim softHyphen As String = ChrW(&h00AD)
      Dim s1 As String = "ani" + softHyphen + "mal" 
      Dim s2 As String = "animal" 

      ' Find the index of the last soft hyphen.
      Console.WriteLine(s1.LastIndexOf(softHyphen))
      Console.WriteLine(s2.LastIndexOf(softHyphen))

      ' Find the index of the last soft hyphen followed by "n".
      Console.WriteLine(s1.LastIndexOf(softHyphen + "n"))
      Console.WriteLine(s2.LastIndexOf(softHyphen + "n"))

      ' Find the index of the last soft hyphen followed by "m".
      Console.WriteLine(s1.LastIndexOf(softHyphen + "m"))
      Console.WriteLine(s2.LastIndexOf(softHyphen + "m"))
   End Sub 
End Module 
' The example displays the following output: 
'       6 
'       5 
'       1 
'       1 
'       4 
'       3
using System;

public class Example
{
   public static void Main()
   {
      string s1 = "ani\u00ADmal";
      string s2 = "animal";

      // Find the index of the last soft hyphen.
      Console.WriteLine(s1.LastIndexOf("\u00AD"));
      Console.WriteLine(s2.LastIndexOf("\u00AD"));

      // Find the index of the last soft hyphen followed by "n".
      Console.WriteLine(s1.LastIndexOf("\u00ADn"));
      Console.WriteLine(s2.LastIndexOf("\u00ADn"));

      // Find the index of the last soft hyphen followed by "m".
      Console.WriteLine(s1.LastIndexOf("\u00ADm"));
      Console.WriteLine(s2.LastIndexOf("\u00ADm"));
   }
}
// The example displays the following output: 
//       6 
//       5 
//       1 
//       1 
//       4 
//       3

Notes to Callers

As explained in Best Practices for Using Strings in the .NET Framework, we recommend that you avoid calling string comparison methods that substitute default values and instead call methods that require parameters to be explicitly specified. To find the last index of a substring within a string instance by using the comparison rules of the current culture, call the LastIndexOf(String, StringComparison) method overload with a value of StringComparisonCurrentCulture for its comparisonType parameter.

Examples

The following example removes opening and closing HTML tags from a string if the tags begin and end the string. If a string ends with a closing bracket character (">"), the example uses the LastIndexOf method to locate the start of the end tag.

Module Example
   Public Sub Main()
      Dim strSource As String() = { "<b>This is bold text</b>", _
                    "<H1>This is large Text</H1>", _
                    "<b><i><font color=green>This has multiple tags</font></i></b>", _
                    "<b>This has <i>embedded</i> tags.</b>", _
                    "This line ends with a greater than symbol and should not be modified>" }

      ' Strip HTML start and end tags from each string if they are present. 
      For Each s As String In strSource
         Console.WriteLine("Before: " + s)
         ' Use EndsWith to find a tag at the end of the line. 
         If s.Trim().EndsWith(">") Then  
            ' Locate the opening tag. 
            Dim endTagStartPosition As Integer = s.LastIndexOf("</")
            ' Remove the identified section if it is valid. 
            If endTagStartPosition >= 0 Then
               s = s.Substring(0, endTagStartPosition)
            End If 

            ' Use StartsWith to find the opening tag. 
            If s.Trim().StartsWith("<") Then 
               ' Locate the end of opening tab. 
               Dim openTagEndPosition As Integer = s.IndexOf(">")
               ' Remove the identified section if it is valid. 
               If openTagEndPosition >= 0 Then
                  s = s.Substring(openTagEndPosition + 1)
               End If    
            End If       
         End If 
         ' Display the trimmed string.
         Console.WriteLine("After: " + s)
         Console.WriteLine()
      Next                    
   End Sub 
End Module 
' The example displays the following output: 
'    Before: <b>This is bold text</b> 
'    After: This is bold text 
'     
'    Before: <H1>This is large Text</H1> 
'    After: This is large Text 
'     
'    Before: <b><i><font color=green>This has multiple tags</font></i></b> 
'    After: <i><font color=green>This has multiple tags</font></i> 
'     
'    Before: <b>This has <i>embedded</i> tags.</b> 
'    After: This has <i>embedded</i> tags. 
'     
'    Before: This line ends with a greater than symbol and should not be modified> 
'    After: This line ends with a greater than symbol and should not be modified>
using System;

public class Example 
{
   public static void Main() 
   {
      string[] strSource = { "<b>This is bold text</b>", "<H1>This is large Text</H1>",
               "<b><i><font color=green>This has multiple tags</font></i></b>",
               "<b>This has <i>embedded</i> tags.</b>",
               "This line ends with a greater than symbol and should not be modified>" };

      // Strip HTML start and end tags from each string if they are present. 
      foreach (string s in strSource)
      {
         Console.WriteLine("Before: " + s);
         string item = s;
         // Use EndsWith to find a tag at the end of the line. 
         if (item.Trim().EndsWith(">")) 
         {
            // Locate the opening tag. 
            int endTagStartPosition = item.LastIndexOf("</");
            // Remove the identified section, if it is valid. 
            if (endTagStartPosition >= 0 )
               item = item.Substring(0, endTagStartPosition);

            // Use StartsWith to find the opening tag. 
            if (item.Trim().StartsWith("<"))
            {
               // Locate the end of opening tab. 
               int openTagEndPosition = item.IndexOf(">");
               // Remove the identified section, if it is valid. 
               if (openTagEndPosition >= 0)
                  item = item.Substring(openTagEndPosition + 1);
            }      
         }
         // Display the trimmed string.
         Console.WriteLine("After: " + item);
         Console.WriteLine();
      }                   
   }
}
// The example displays the following output: 
//    Before: <b>This is bold text</b> 
//    After: This is bold text 
//     
//    Before: <H1>This is large Text</H1> 
//    After: This is large Text 
//     
//    Before: <b><i><font color=green>This has multiple tags</font></i></b> 
//    After: <i><font color=green>This has multiple tags</font></i> 
//     
//    Before: <b>This has <i>embedded</i> tags.</b> 
//    After: This has <i>embedded</i> tags. 
//     
//    Before: This line ends with a greater than symbol and should not be modified> 
//    After: This line ends with a greater than symbol and should not be modified>
Version Information

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

XNA Framework

Supported in: 3.0, 2.0, 1.0

Portable Class Library

Supported in: Portable Class Library

Supported in: Windows Phone 8.1

Supported in: Windows Phone Silverlight 8.1

Supported in: Windows Phone Silverlight 8