String.Substring Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Извлекает подстроку из данного экземпляра.
Этот член перегружен. Для получения полной информации о данном члене, включая синтаксис, использование и примеры, щелкните имя в списке перегрузок.
Перегрузки
Substring(Int32) |
Извлекает подстроку из данного экземпляра. Подстрока начинается в указанном положении символов и продолжается до конца строки. |
Substring(Int32, Int32) |
Извлекает подстроку из данного экземпляра. Подстрока начинается с указанной позиции знака и имеет указанную длину. |
Substring(Int32)
- Исходный код:
- String.Manipulation.cs
- Исходный код:
- String.Manipulation.cs
- Исходный код:
- String.Manipulation.cs
Извлекает подстроку из данного экземпляра. Подстрока начинается в указанном положении символов и продолжается до конца строки.
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
Отсчитываемая от нуля позиция первого знака подстроки в данном экземпляре.
Возвращаемое значение
Строка, эквивалентная подстроке, которая начинается с 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
let info =
[| "Name: Felica Walker"; "Title: Mz."
"Age: 47"; "Location: Paris"; "Gender: F" |]
printfn "The initial values in the array are:"
for s in info do
printfn $"{s}"
printfn "\nWe want to retrieve only the key information. That is:"
for s in info do
let found = s.IndexOf ": "
printfn $" {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 для разделения пар "ключ-значение", разделенных символом равенства (=
).
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'
let pairs =
[| "Color1=red"; "Color2=green"; "Color3=blue"
"Title=Code Repository" |]
for pair in pairs do
let position = pair.IndexOf "="
if position >= 0 then
printfn $"Key: {pair.Substring(0, position)}, Value: '{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 используется для получения позиции символа равенства в строке. Вызов Substring(Int32, Int32) метода извлекает имя ключа, которое начинается с первого символа в строке и расширяет число символов, возвращаемых вызовом IndexOf метода . Затем вызов Substring(Int32) метода извлекает значение, назначенное ключу. Он начинается с одной позиции символа за пределами символа равного и простирается до конца строки.
Комментарии
Метод вызывается Substring(Int32) для извлечения подстроки из строки, которая начинается с указанной позиции символа и заканчивается в конце строки. Начальная позиция символа отсчитывается от нуля; другими словами, первый символ в строке находится в индексе 0, а не в индексе 1. Чтобы извлечь подстроку, которая начинается с указанной позиции символа и заканчивается до конца строки, вызовите Substring(Int32, Int32) метод .
Примечание
Этот метод не изменяет значение текущего экземпляра. Вместо этого он возвращает новую строку, которая начинается с startIndex
позиции в текущей строке.
Чтобы извлечь подстроку, которая начинается с определенного символа или последовательности символов, вызовите метод, например IndexOf или IndexOf , чтобы получить значение startIndex
. Второй пример иллюстрирует это; Извлекает ключевое значение, которое начинается на одну позицию символа после символа =
.
Если startIndex
равно нулю, метод возвращает исходную строку без изменений.
См. также раздел
- Int32
- Concat(Object)
- Insert(Int32, String)
- Join(String, String[])
- Remove(Int32, Int32)
- Replace(Char, Char)
- Split(Char[])
- Trim(Char[])
Применяется к
Substring(Int32, Int32)
- Исходный код:
- String.Manipulation.cs
- Исходный код:
- String.Manipulation.cs
- Исходный код:
- String.Manipulation.cs
Извлекает подстроку из данного экземпляра. Подстрока начинается с указанной позиции знака и имеет указанную длину.
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
Число символов в подстроке.
Возвращаемое значение
Строка, эквивалентная подстроке длиной length
, которая начинается с startIndex
в данном экземпляре, или Empty, если значение startIndex
равно длине данного экземпляра, а значение length
равно нулю.
Исключения
startIndex
плюс length
указывает на позицию за пределами данного экземпляра.
-или-
Значение параметра startIndex
или length
меньше нуля.
Примеры
В следующем примере показан простой вызов Substring(Int32, Int32) метода , который извлекает два символа из строки, начиная с шестой позиции символа (то есть с индексом пять).
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
let value = "This is a string."
let startIndex = 5
let length = 2
let substring = value.Substring(startIndex, length)
printfn $"{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
let myString = "abc"
let test1 = myString.Substring(2, 1).Equals "c" // This is true.
printfn $"{test1}"
let test2 = String.IsNullOrEmpty(myString.Substring(3, 0)) // This is true.
printfn $"{test2}"
try
let str3 = myString.Substring(3, 1) // This throws ArgumentOutOfRangeException.
printfn $"{str3}"
with :? ArgumentOutOfRangeException as e ->
printfn $"{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 для разделения пар "ключ-значение", разделенных символом равенства (=
).
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'
let pairs =
[| "Color1=red"; "Color2=green"; "Color3=blue"
"Title=Code Repository" |]
for pair in pairs do
let position = pair.IndexOf "="
if position >= 0 then
printfn $"Key: {pair.Substring(0, position)}, Value: '{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 используется для получения позиции символа равенства в строке. Вызов Substring(Int32, Int32) метода извлекает имя ключа, которое начинается с первого символа в строке и расширяет число символов, возвращаемых вызовом IndexOf метода . Затем вызов Substring(Int32) метода извлекает значение, назначенное ключу. Он начинается с одной позиции символа за пределами символа равного и простирается до конца строки.
Комментарии
Метод вызывается Substring(Int32, Int32) для извлечения подстроки из строки, которая начинается с указанной позиции символа и заканчивается до конца строки. Начальная позиция символа отсчитывается от нуля; другими словами, первый символ в строке находится в индексе 0, а не в индексе 1. Чтобы извлечь подстроку, которая начинается с указанной позиции символа и продолжается до конца строки, вызовите Substring(Int32) метод .
Примечание
Этот метод не изменяет значение текущего экземпляра. Вместо этого он возвращает новую строку с символами, начиная с length
startIndex
позиции в текущей строке.
Параметр length
представляет общее количество символов, извлекаемых из текущего экземпляра строки. Сюда входит начальный символ, найденный в индексе startIndex
. Иными словами Substring , метод пытается извлечь символы из индекса startIndex
в индекс startIndex
+ length
— 1.
Чтобы извлечь подстроку, которая начинается с определенного символа или последовательности символов, вызовите метод, например IndexOf или LastIndexOf , чтобы получить значение startIndex
.
Если подстрока должна расширяться с startIndex
до указанной последовательности символов, можно вызвать метод, IndexOf например или , LastIndexOf чтобы получить индекс конечного символа или последовательности символов. Затем это значение можно преобразовать в позицию индекса в строке следующим образом:
Если вы выполнили поиск одного символа, который должен пометить конец подстроки,
length
параметр равен -startIndex
endIndex
+ 1, гдеendIndex
— возвращаемое значение IndexOf метода или .LastIndexOf В следующем примере извлекается непрерывный блок символов "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
let s = "aaaaabbbcccccccdd" let charRange = 'b' let startIndex = s.IndexOf charRange let endIndex = s.LastIndexOf charRange let length = endIndex - startIndex + 1 printfn $"{s}.Substring({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
параметр равен -endMatchLength
endIndex
+startIndex
, гдеendIndex
— возвращаемое значение IndexOf метода или LastIndexOf , аendMatchLength
— длина последовательности символов, которая отмечает конец подстроки. В следующем примере извлекается блок текста, содержащий 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>
let s = "<term>extant<definition>still in existence</definition></term>" let searchString = "<definition>" let startIndex = s.IndexOf(searchString) let searchString = "</" + searchString.Substring 1 let endIndex = s.IndexOf searchString let substring = s.Substring(startIndex, endIndex + searchString.Length - startIndex) printfn $"Original string: {s}" printfn $"Substring; {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 метода или .LastIndexOf
Если startIndex
равно нулю и length
равно длине текущей строки, метод возвращает исходную строку без изменений.