String.Substring 方法

定义

从此实例检索子字符串。

重载此成员。 有关此成员的完整信息(包括语法、用法和示例),请单击重载列表中的相应名称。

重载

Substring(Int32)

从此实例检索子字符串。 子字符串在指定的字符位置开始并一直到该字符串的末尾。

Substring(Int32, Int32)

从此实例检索子字符串。 子字符串从指定的字符位置开始且具有指定的长度。

Substring(Int32)

从此实例检索子字符串。 子字符串在指定的字符位置开始并一直到该字符串的末尾。

public:
 System::String ^ Substring(int startIndex);
public string Substring (int startIndex);
member this.Substring : int -> string
Public Function Substring (startIndex As Integer) As String

参数

startIndex
Int32

此实例中子字符串的起始字符位置(从零开始)。

返回

String

与此实例中在 startIndex 处开头的子字符串等效的一个字符串;如果 Empty 等于此实例的长度,则为 startIndex

例外

startIndex 小于零或大于此实例的长度。

示例

下面的示例演示如何从字符串中获取子字符串。

using namespace System;
using namespace System::Collections;

int main()
{
   array<String^>^info = { "Name: Felica Walker", "Title: Mz.",
                           "Age: 47", "Location: Paris", "Gender: F"};
   int found = 0;
   Console::WriteLine("The initial values in the array are:");
   for each (String^ s in info) 
      Console::WriteLine(s);

   Console::WriteLine("\nWe want to retrieve only the key information. That is:");
   for each (String^ s in info) { 
      found = s->IndexOf(": ");
      Console::WriteLine("   {0}", s->Substring(found + 2));
   }
}
// The example displays the following output:
//       The initial values in the array are:
//       Name: Felica Walker
//       Title: Mz.
//       Age: 47
//       Location: Paris
//       Gender: F
//       
//       We want to retrieve only the key information. That is:
//       Felica Walker
//       Mz.
//       47
//       Paris
//       F
string [] info = { "Name: Felica Walker", "Title: Mz.", 
                   "Age: 47", "Location: Paris", "Gender: F"};
int found = 0;

Console.WriteLine("The initial values in the array are:");
foreach (string s in info)
    Console.WriteLine(s);

Console.WriteLine("\nWe want to retrieve only the key information. That is:");        
foreach (string s in info) 
{
    found = s.IndexOf(": ");
    Console.WriteLine("   {0}", s.Substring(found + 2));
}

// The example displays the following output:
//       The initial values in the array are:
//       Name: Felica Walker
//       Title: Mz.
//       Age: 47
//       Location: Paris
//       Gender: F
//       
//       We want to retrieve only the key information. That is:
//          Felica Walker
//          Mz.
//          47
//          Paris
//          F
Public Class SubStringTest
    Public Shared Sub Main()
        Dim info As String() = { "Name: Felica Walker", "Title: Mz.", 
                                 "Age: 47", "Location: Paris", "Gender: F"}
        Dim found As Integer = 0
       
        Console.WriteLine("The initial values in the array are:")
        For Each s As String In info
            Console.WriteLine(s)
        Next s

        Console.WriteLine(vbCrLf + "We want to retrieve only the key information. That is:")
        For Each s As String In info
            found = s.IndexOf(": ")
            Console.WriteLine("   {0}", s.Substring(found + 2))
        Next s
    End Sub 
End Class 
' The example displays the following output:
'       The initial values in the array are:
'       Name: Felica Walker
'       Title: Mz.
'       Age: 47
'       Location: Paris
'       Gender: F
'       
'       We want to retrieve only the key information. That is:
'          Felica Walker
'          Mz.
'          47
'          Paris
'          F

下面的示例使用 Substring 方法将由 equals ( "=" 分隔的键/值对 ) 字符分隔开。

String[] pairs = { "Color1=red", "Color2=green", "Color3=blue",
                 "Title=Code Repository" };
foreach (var pair in pairs) 
{
    int position = pair.IndexOf("=");
    if (position < 0)
        continue;
    Console.WriteLine("Key: {0}, Value: '{1}'", 
                   pair.Substring(0, position),
                   pair.Substring(position + 1));
}                          

// The example displays the following output:
//     Key: Color1, Value: 'red'
//     Key: Color2, Value: 'green'
//     Key: Color3, Value: 'blue'
//     Key: Title, Value: 'Code Repository'
Module Example
   Public Sub Main()
      Dim pairs() As String = { "Color1=red", "Color2=green", "Color3=blue",
                                "Title=Code Repository" }
      For Each pair In pairs
         Dim position As Integer = pair.IndexOf("=")
         If position < 0 then Continue For
         Console.WriteLine("Key: {0}, Value: '{1}'", 
                           pair.Substring(0, position),
                           pair.Substring(position + 1))
      Next                          
   End Sub
End Module
' The example displays the following output:
'     Key: Color1, Value: 'red'
'     Key: Color2, Value: 'green'
'     Key: Color3, Value: 'blue'
'     Key: Title, Value: 'Code Repository'

IndexOf方法用于获取字符串中 equals 字符的位置。 对方法的调用 Substring(Int32, Int32) 提取键名称,该键名称从字符串中的第一个字符开始,并针对对方法的调用返回的字符数进行扩展 IndexOf 。 然后,对方法的调用将 Substring(Int32) 提取分配给该密钥的值。 它从 equals 字符之外的一个字符位置开始,并扩展到字符串的末尾。

注解

调用 Substring(Int32) 方法可从字符串中提取从指定字符位置开始并在字符串末尾结束的子字符串。 起始字符位置是从零开始的;换句话说,字符串中的第一个字符位于索引0,而不是索引1。 若要提取从指定字符位置开始并在字符串末尾之前结束的子字符串,请调用 Substring(Int32, Int32) 方法。

备注

此方法不会修改当前实例的值。 相反,它会返回从当前字符串中的位置开始的新字符串 startIndex

若要提取以特定字符或字符序列开头的子字符串,请调用方法(如 IndexOf 或) IndexOf 来获取的值 startIndex 。 第二个示例对此进行了说明:它提取在 "=" 字符后开始一个字符位置的键值。

如果 startIndex 等于零,则此方法返回未更改的原始字符串。

另请参阅

适用于

Substring(Int32, Int32)

从此实例检索子字符串。 子字符串从指定的字符位置开始且具有指定的长度。

public:
 System::String ^ Substring(int startIndex, int length);
public string Substring (int startIndex, int length);
member this.Substring : int * int -> string
Public Function Substring (startIndex As Integer, length As Integer) As String

参数

startIndex
Int32

此实例中子字符串的起始字符位置(从零开始)。

length
Int32

子字符串中的字符数。

返回

String

与此实例中在 length 处开头、长度为 startIndex 的子字符串等效的一个字符串;如果 Empty 等于此实例的长度且 startIndex 为零,则为 length

例外

startIndexlength 指示不在此实例内的位置。

  • 或 -

startIndexlength 小于零。

示例

下面的示例演示了一个简单的 Substring(Int32, Int32) 方法调用方法,该方法从第六个字符位置开始的字符串中提取两个字符, (即索引为 5) 。

String value = "This is a string.";
int startIndex = 5;
int length = 2;
String substring = value.Substring(startIndex, length);
Console.WriteLine(substring);

// The example displays the following output:
//       is
Module Example
   Public Sub Main()
      Dim value As String = "This is a string."
      Dim startIndex As Integer = 5
      Dim length As Integer = 2
      Dim substring As String = value.Substring(startIndex, length)
      Console.WriteLine(substring)
   End Sub
End Module
' The example displays the following output:
'       is

下面的示例使用 Substring(Int32, Int32) 以下三种情况中的方法来隔离字符串中的子字符串。 在两种情况下,将在比较中使用子字符串,在第三种情况下将引发异常,因为指定了无效的参数。

  • 它提取索引) 2 处的字符串 (中的单个字符和第三个位置,并将其与 "c" 进行比较。 此比较返回 true

  • 它从索引 3) 的字符串 (中的第四个位置提取零个字符,并将其传递给 IsNullOrEmpty 方法。 此方法返回 true,因为对方法的调用将 Substring 返回 String.Empty

  • 它将尝试从字符串中的第四个位置提取一个字符。 由于该位置没有任何字符,因此方法调用会引发 ArgumentOutOfRangeException 异常。

string myString = "abc";
bool test1 = myString.Substring(2, 1).Equals("c"); // This is true.
Console.WriteLine(test1);
bool test2 = string.IsNullOrEmpty(myString.Substring(3, 0)); // This is true.
Console.WriteLine(test2);
try
{
   string str3 = myString.Substring(3, 1); // This throws ArgumentOutOfRangeException.
   Console.WriteLine(str3);
}
catch (ArgumentOutOfRangeException e)
{
   Console.WriteLine(e.Message);
}

// The example displays the following output:
//       True
//       True
//       Index and length must refer to a location within the string.
//       Parameter name: length
Public Class Sample
   Public Shared Sub Main()
      Dim myString As String = "abc"
      Dim test1 As Boolean = myString.Substring(2, 1).Equals("c") ' This is true.
      Console.WriteLine(test1)
      Dim test2 As Boolean = String.IsNullOrEmpty(myString.Substring(3, 0)) ' This is true.
      Console.WriteLine(test2)
      Try  
         Dim str3 As String = myString.Substring(3, 1) ' This throws ArgumentOutOfRangeException.
         Console.WriteLine(str3)
      Catch e As ArgumentOutOfRangeException
         Console.WriteLIne(e.Message)
      End Try   
   End Sub
End Class 
' The example displays the following output:
'       True
'       True
'       Index and length must refer to a location within the string.
'       Parameter name: length

下面的示例使用 Substring 方法将由 equals ( "=" 分隔的键/值对 ) 字符分隔开。

String[] pairs = { "Color1=red", "Color2=green", "Color3=blue",
                 "Title=Code Repository" };
foreach (var pair in pairs) 
{
    int position = pair.IndexOf("=");
    if (position < 0)
        continue;
    Console.WriteLine("Key: {0}, Value: '{1}'", 
                   pair.Substring(0, position),
                   pair.Substring(position + 1));
}                          

// The example displays the following output:
//     Key: Color1, Value: 'red'
//     Key: Color2, Value: 'green'
//     Key: Color3, Value: 'blue'
//     Key: Title, Value: 'Code Repository'
Module Example
   Public Sub Main()
      Dim pairs() As String = { "Color1=red", "Color2=green", "Color3=blue",
                                "Title=Code Repository" }
      For Each pair In pairs
         Dim position As Integer = pair.IndexOf("=")
         If position < 0 then Continue For
         Console.WriteLine("Key: {0}, Value: '{1}'", 
                           pair.Substring(0, position),
                           pair.Substring(position + 1))
      Next                          
   End Sub
End Module
' The example displays the following output:
'     Key: Color1, Value: 'red'
'     Key: Color2, Value: 'green'
'     Key: Color3, Value: 'blue'
'     Key: Title, Value: 'Code Repository'

IndexOf方法用于获取字符串中 equals 字符的位置。 对方法的调用 Substring(Int32, Int32) 提取键名称,该键名称从字符串中的第一个字符开始,并针对对方法的调用返回的字符数进行扩展 IndexOf 。 然后,对方法的调用将 Substring(Int32) 提取分配给该密钥的值。 它从 equals 字符之外的一个字符位置开始,并扩展到字符串的末尾。

注解

调用 Substring(Int32, Int32) 方法可从字符串中提取从指定字符位置开始并在字符串末尾之前结束的子字符串。 起始字符位置是从零开始的;换句话说,字符串中的第一个字符位于索引0,而不是索引1。 若要提取从指定字符位置开始并持续到字符串末尾的子字符串,请调用 Substring(Int32) 方法。

备注

此方法不会修改当前实例的值。 相反,它会返回一个新字符串,其中包含 lengthstartIndex 当前字符串中的位置开始的字符。

length参数表示要从当前字符串实例中提取的字符的总数。 这包括索引处的起始字符 startIndex 。 换言之,此 Substring 方法尝试从索引 startIndex 到索引 startIndex + length -1 提取字符。

若要提取以特定字符或字符序列开头的子字符串,请调用方法(如 IndexOf 或) LastIndexOf 来获取的值 startIndex

如果子字符串从扩展 startIndex 到指定的字符序列,则可以调用方法(如 IndexOf 或) LastIndexOf 来获取结束字符或字符序列的索引。 然后,可以将该值转换为字符串中的索引位置,如下所示:

  • 如果已搜索要标记子字符串末尾的单个字符,则 length 参数等于 endIndex - startIndex + 1,其中 endIndex 是或方法的返回值 IndexOf IndexOf 。 下面的示例从字符串中提取 "b" 字符的连续块。

    String s = "aaaaabbbcccccccdd";
    Char charRange = 'b';
    int startIndex = s.IndexOf(charRange);
    int endIndex = s.LastIndexOf(charRange);
    int length = endIndex - startIndex + 1;
    Console.WriteLine("{0}.Substring({1}, {2}) = {3}",
                    s, startIndex, length, 
                    s.Substring(startIndex, length));
    
    // The example displays the following output:
    //       aaaaabbbcccccccdd.Substring(5, 3) = bbb
    
    Module Example
       Public Sub Main()
          Dim s As String = "aaaaabbbcccccccdd"
          Dim charRange As Char = "b"c
          Dim startIndex As Integer = s.Indexof(charRange)
          Dim endIndex As Integer = s.LastIndexOf(charRange)
          Dim length = endIndex - startIndex + 1
          Console.WriteLine("{0}.Substring({1}, {2}) = {3}",
                            s, startIndex, length, 
                            s.Substring(startIndex, length))
       End Sub
    End Module
    ' The example displays the following output:
    '     aaaaabbbcccccccdd.Substring(5, 3) = bbb
    
  • 如果已搜索多个字符来标记子字符串的末尾,则 length 参数等于 endIndex + endMatchLength - startIndex ,其中 endIndex 是或方法的返回值 IndexOf IndexOfendMatchLength 是标记子字符串末尾的字符序列的长度。 下面的示例提取包含 XML 元素的文本块 <definition>

    String s = "<term>extant<definition>still in existence</definition></term>";
    String searchString = "<definition>";
    int startIndex = s.IndexOf(searchString);
    searchString = "</" + searchString.Substring(1);
    int endIndex = s.IndexOf(searchString);
    String substring = s.Substring(startIndex, endIndex + searchString.Length - startIndex);
    Console.WriteLine("Original string: {0}", s);
    Console.WriteLine("Substring;       {0}", substring); 
    
    // The example displays the following output:
    //     Original string: <term>extant<definition>still in existence</definition></term>
    //     Substring;       <definition>still in existence</definition>
    
    Module Example
       Public Sub Main()
          Dim s As String = "<term>extant<definition>still in existence</definition></term>"
          Dim searchString As String = "<definition>"
          Dim startindex As Integer = s.IndexOf(searchString)
          searchString = "</" + searchString.Substring(1)
          Dim endIndex As Integer = s.IndexOf(searchString)
          Dim substring As String = s.Substring(startIndex, endIndex + searchString.Length - StartIndex)
          Console.WriteLine("Original string: {0}", s)
          Console.WriteLine("Substring;       {0}", substring) 
       End Sub
    End Module
    ' The example displays the following output:
    '   Original string: <term>extant<definition>still in existence</definition></term>
    '   Substring;       <definition>still in existence</definition>
    
  • 如果字符或字符序列未包含在子字符串的末尾,则 length 参数等于 endIndex - startIndex ,其中 endIndex 是或方法的返回值 IndexOf IndexOf

如果 startIndex 等于零并且等于当前字符串的长度,则此方法返回未更改的原始字符串。

另请参阅

适用于