StringBuilder.Chars[Int32] Tulajdonság

Definíció

Lekéri vagy beállítja a karaktert a megadott karakterpozícióban ebben a példányban.

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

Paraméterek

index
Int32

A karakter pozíciója.

Tulajdonság értéke

A Unicode karakter a pozícióban index.

Kivételek

index karakter beállításakor kívül esik a példány határain.

index a karakter beolvasása közben kívül esik a példány határain.

Megjegyzések

A index paraméter egy karakter pozíciója a StringBuilder. A sztring első karaktere a 0 indexnél van. A karakterlánc hossza a benne szereplő karakterek száma. A példány utolsó akadálymentes karaktere StringBuilder az indexben Length van – 1.

Chars[Int32] az osztály alapértelmezett tulajdonsága StringBuilder . A C#-ban ez egy indexelő. Ez azt jelenti, hogy az egyes karakterek lekérhetők a tulajdonságból az Chars[Int32] alábbi példában látható módon, amely megszámolja a karakterlánc betűrendes, szóköz- és írásjeles karaktereinek számát.

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

A karakteralapú indexelés a tulajdonsággal Chars[] rendkívül lassú lehet a következő feltételek mellett:

A teljesítményre súlyos hatással van, mert minden karakterhozzáférés végigvezeti az adattömbök teljes csatolt listáját, hogy megtalálja a megfelelő puffert az indexeléshez.

Note

Még egy nagy méretű, "masszív" StringBuilder objektum esetén is az Chars[] tulajdonság használata indexalapú eléréshez egy vagy kevés számú karakter esetében elhanyagolható teljesítménybeli hatással jár; rendszerint ez egy O(n) művelet. A jelentős teljesítményhatás az objektum karaktereinek StringBuilder iterálásakor jelentkezik, amely egy O(n^2) művelet.

Ha teljesítményproblémákat tapasztal a karakteralapú indexelés objektumokkal StringBuilder való használatakor, az alábbi megkerülő megoldások bármelyikét használhatja:

  • A StringBuilder példányt alakítsa át String-é a ToString metódus meghívásával, majd férjen hozzá a karakterekhez a sztringben.

  • Másolja a meglévő StringBuilder objektum tartalmát egy új előméretű StringBuilder objektumba. A teljesítmény javul, mert az új StringBuilder objektum nem darabos. Például:

    // 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)
    
  • A konstruktor meghívásával állítsa az StringBuilder objektum kezdeti kapacitását olyan értékre, amely körülbelül megegyezik a StringBuilder(Int32) maximálisan várt mérettel. Vegye figyelembe, hogy ez akkor is lefoglalja a teljes memóriablokkot, ha az ritkán éri el a StringBuilder maximális kapacitást.

A következőre érvényes:

Lásd még