本文由机器翻译。若要查看英语原文,请勾选“英语”复选框。 也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

String.Substring 方法 (Int32, Int32)

 

发布日期: 2016年7月

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

命名空间:   System
程序集:  mscorlib(位于 mscorlib.dll)

public string Substring(
	int startIndex,
	int length
)

参数

startIndex
Type: System.Int32

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

length
Type: System.Int32

子字符串中的字符数。

返回值

Type: System.String

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

Exception Condition
ArgumentOutOfRangeException

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

- 或 -

startIndexlength 小于零。

你调用Substring(Int32, Int32)方法以从指定的字符位置开始和结束之前字符串末尾的字符串中提取子字符串。 起始字符位置是从零开始;换而言之,在字符串中的第一个字符位于索引 0,不得索引 1 处。 若要提取子字符串从指定的字符位置开始并一直到字符串的末尾,调用Substring(Int32)方法。

System_CAPS_note说明

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

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

若要提取特定字符或字符序列开头的子字符串,调用方法如IndexOfLastIndexOf若要获取的值startIndex

如果子字符串从扩展startIndex到指定的字符序列,你可以调用一个方法如IndexOfLastIndexOf若要获取的结束字符或字符序列的索引。 你可以然后将该值转换到字符串中的索引位置,如下所示︰

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

    using System;
    
    public class Example
    {
       public static void Main()
       {
          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
    
  • 如果您已搜索多个字符的标记的末尾的子字符串,length参数等于endIndex+ endMatchLength - startIndex,其中endIndex是返回值的IndexOfIndexOf方法。 和endMatchLength是标记的子字符串末尾的字符序列的长度。 下面的示例提取包含 XML 的文本块<definition>元素。

    using System;
    
    public class Example
    {
       public static void Main()
       {
          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>
    
  • 如果字符或字符序列不包含的末尾的子字符串,在length参数等于endIndex- startIndex,其中endIndex是返回值的IndexOfIndexOf方法。

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

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

using System;

public class Example
{
   public static void Main()
   {
      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

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

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

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

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

using System;

public class Sample
{
   public static void Main() {
      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

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

using System;

public class Example
{
   public static void Main()
   {
      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'

The M:System.String.IndexOf(System.String) method is used to get the position of the equals character in the string.. The call to the M:System.String.Substring(System.Int32,System.Int32) method extracts the key name., which starts from the first character in the string and extends for the number of characters returned by the call to the M:System.String.IndexOf(System.String) method. The call to the M:System.String.Substring(System.Int32) method then extracts the value assigned to the key. It starts at one character position beyond the equals character and extends to the end of the string.

通用 Windows 平台
自 8 起可用
.NET Framework
自 1.1 起可用
可移植类库
可移植 .NET 平台 中受支持
Silverlight
自 2.0 起可用
Windows Phone Silverlight
自 7.0 起可用
Windows Phone
自 8.1 起可用
返回页首
显示: