StringBuilder.Chars[Int32] Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает или задает символ на указанной позиции в данном экземпляре.
public:
property char default[int] { char get(int index); void set(int index, char value); };
public char this[int index] { get; set; }
member this.Chars(int) : char with get, set
Default Public Property Chars(index As Integer) As Char
Параметры
- index
- Int32
Позиция символа.
Значение свойства
Символ Юникода в позиции index
.
Исключения
При задании символа index
находится за пределами данного экземпляра.
При получении символа index
находится за пределами данного экземпляра.
Комментарии
Параметр index
— это позиция символа в .StringBuilder Первый символ в строке имеет индекс 0. Длина строки — это количество содержащихся в ней символов. Последний доступный символ экземпляра StringBuilder имеет значение index Length - 1.
Chars[Int32] — это свойство класса по умолчанию StringBuilder . В C# это индексатор. Это означает, что отдельные символы можно извлечь из Chars[Int32] свойства , как показано в следующем примере, который подсчитывает количество букв, пробелов и знаков препинания в строке.
using System;
using System.Text;
public class Example
{
public static void Main()
{
int nAlphabeticChars = 0;
int nWhitespace = 0;
int nPunctuation = 0;
StringBuilder sb = new StringBuilder("This is a simple sentence.");
for (int ctr = 0; ctr < sb.Length; ctr++) {
char ch = sb[ctr];
if (Char.IsLetter(ch)) { nAlphabeticChars++; continue; }
if (Char.IsWhiteSpace(ch)) { nWhitespace++; continue; }
if (Char.IsPunctuation(ch)) nPunctuation++;
}
Console.WriteLine("The sentence '{0}' has:", sb);
Console.WriteLine(" Alphabetic characters: {0}", nAlphabeticChars);
Console.WriteLine(" White-space characters: {0}", nWhitespace);
Console.WriteLine(" Punctuation characters: {0}", nPunctuation);
}
}
// The example displays the following output:
// The sentence 'This is a simple sentence.' has:
// Alphabetic characters: 21
// White-space characters: 4
// Punctuation characters: 1
open System
open System.Text
let mutable nAlphabeticChars = 0
let mutable nWhitespace = 0
let mutable nPunctuation = 0
let sb = StringBuilder "This is a simple sentence."
for i = 0 to sb.Length - 1 do
let ch = sb[i]
if Char.IsLetter ch then
nAlphabeticChars <- nAlphabeticChars + 1
elif Char.IsWhiteSpace ch then
nWhitespace <- nWhitespace + 1
elif Char.IsPunctuation ch then
nPunctuation <- nPunctuation + 1
printfn $"The sentence '{sb}' has:"
printfn $" Alphabetic characters: {nAlphabeticChars}"
printfn $" White-space characters: {nWhitespace}"
printfn $" Punctuation characters: {nPunctuation}"
// The example displays the following output:
// The sentence 'This is a simple sentence.' has:
// Alphabetic characters: 21
// White-space characters: 4
// Punctuation characters: 1
Imports System.Text
Module Example
Public Sub Main()
Dim nAlphabeticChars As Integer = 0
Dim nWhitespace As Integer = 0
Dim nPunctuation As Integer = 0
Dim sb As New StringBuilder("This is a simple sentence.")
For ctr As Integer = 0 To sb.Length - 1
Dim ch As Char = sb(ctr)
If Char.IsLetter(ch) Then nAlphabeticChars += 1 : Continue For
If Char.IsWhiteSpace(ch) Then nWhitespace += 1 : Continue For
If Char.IsPunctuation(ch) Then nPunctuation += 1
Next
Console.WriteLine("The sentence '{0}' has:", sb)
Console.WriteLine(" Alphabetic characters: {0}", nAlphabeticChars)
Console.WriteLine(" White-space characters: {0}", nWhitespace)
Console.WriteLine(" Punctuation characters: {0}", nPunctuation)
End Sub
End Module
' The example displays the following output:
' The sentence 'This is a simple sentence.' has:
' Alphabetic characters: 21
' White-space characters: 4
' Punctuation characters: 1
Индексирование на основе символов со свойством Chars[] может работать очень медленно при следующих условиях:
- Экземпляр StringBuilder очень большой (например, состоит из нескольких десятков тысяч символов).
- Элемент StringBuilder является "куским". Это значит, что повторные вызовы методов, таких как StringBuilder.Append , автоматически расширили свойство объекта StringBuilder.Capacity и выделили ему новые блоки памяти.
Это значительно влияет на производительность, поскольку при каждом доступе к символу проходится весь связанный список блоков с целью найти правильный буфер для индексации.
Примечание
Даже для большого "фрагмента" StringBuilder объекта использование Chars[] свойства для доступа на основе индекса к одному или небольшому количеству символов оказывает незначительное влияние на производительность; как правило, это операция O(n). Производительность серьезно снижается во время итерации символов в объекте StringBuilder — операция O(n^2).
Если возникают проблемы с производительностью при использовании символьного индексирования с объектами StringBuilder, попробуйте выполнить одно из следующих действий:
Преобразуйте экземпляр StringBuilder в String путем вызова метода ToString, а затем получите доступ к символам в строке.
Скопируйте содержимое существующего объекта StringBuilder в новый объект StringBuilder с заданным размером. Производительность повышается, так как новый объект StringBuilder не содержит блоков. Пример:
// sbOriginal is the existing StringBuilder object var sbNew = new StringBuilder(sbOriginal.ToString(), sbOriginal.Length);
' sbOriginal is the existing StringBuilder object Dim sbNew = New StringBuilder(sbOriginal.ToString(), sbOriginal.Length)
Установите для начальной вместимости объекта StringBuilder значение, примерно равное максимальному ожидаемому размеру, путем вызова конструктора StringBuilder(Int32). Имейте в виду, что будет выделен целый блок памяти, даже если StringBuilder редко достигает своего максимального размера.