StringBuilder.Chars[Int32] Propriedade

Definição

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:

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.

Aplica-se a

Ver também