StringBuilder.Chars[Int32] Propriedade
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Obtém ou define o carácter na posição especificada neste caso.
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
Parâmetros
- index
- Int32
A posição da personagem.
Valor de Propriedade
O carácter Unicode na posição index.
Exceções
index está fora dos limites desta instância ao definir uma personagem.
index está fora dos limites desta instância ao obter um personagem.
Observações
O index parâmetro é a posição de um carácter dentro do StringBuilder. O primeiro carácter da cadeia está no índice 0. O comprimento de uma cadeia é o número de caracteres que contém. O último carácter acessível de uma StringBuilder instância está no índice Length - 1.
Chars[Int32] é a propriedade padrão da StringBuilder classe. Em C#, é um indexador. Isto significa que os caracteres individuais podem ser recuperados da Chars[Int32] propriedade, como mostrado no exemplo seguinte, que conta o número de caracteres alfabéticos, espaços em branco e pontuação numa cadeia.
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
O uso da indexação baseada em caracteres com a Chars[] propriedade pode ser extremamente lento nas seguintes condições:
- A StringBuilder instância é grande (por exemplo, consiste em várias dezenas de milhares de caracteres).
- O StringBuilder é "grosso". Ou seja, chamadas repetidas para métodos como StringBuilder.Append expandiram automaticamente a propriedade do StringBuilder.Capacity objeto e alocaram novos pedaços de memória para ele.
O desempenho é severamente afetado porque cada acesso a caracteres percorre toda a lista vinculada de partes para encontrar o buffer correto para indexação.
Note
Mesmo para um objeto grande "chunky" StringBuilder, usar a propriedade Chars[] para acesso baseado em índice a um ou a um pequeno número de caracteres tem um impacto insignificante no desempenho; normalmente é uma operação O(n). O impacto significativo no desempenho ocorre ao iterar os caracteres no StringBuilder objeto, que é uma operação O(n^2).
Se você encontrar problemas de desempenho ao usar a indexação baseada em caracteres com StringBuilder objetos, poderá usar qualquer uma das seguintes soluções alternativas:
Converta a StringBuilder instância em um String chamando o ToString método e, em seguida, acesse os caracteres na cadeia de caracteres.
Copie o conteúdo do objeto existente StringBuilder para um novo objeto pré-dimensionado StringBuilder . O desempenho melhora porque o novo StringBuilder objeto não é volumoso. Por exemplo:
// 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)Defina a StringBuilder capacidade inicial do objeto para um valor que seja aproximadamente igual ao seu tamanho máximo esperado chamando o StringBuilder(Int32) construtor. Observe que isso aloca todo o bloco de memória, mesmo que raramente StringBuilder atinja sua capacidade máxima.