StringBuilder.Chars[Int32] Właściwość
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Pobiera lub ustawia znak na określonej pozycji znaku w tym wystąpieniu.
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
Parametry
- index
- Int32
Położenie znaku.
Wartość właściwości
Znak Unicode na pozycji index.
Wyjątki
index znajduje się poza granicami tego wystąpienia podczas ustawiania znaku.
index znajduje się poza granicami tego wystąpienia podczas uzyskiwania znaku.
Uwagi
Parametr index jest pozycją znaku w obiekcie StringBuilder. Pierwszy znak w ciągu to indeks 0. Długość ciągu to liczba znaków, które zawiera. Ostatni dostępny znak StringBuilder wystąpienia to indeks Length - 1.
Chars[Int32] jest domyślną właściwością StringBuilder klasy. W języku C#jest to indeksator. Oznacza to, że poszczególne znaki można pobrać z Chars[Int32] właściwości, jak pokazano w poniższym przykładzie, co zlicza liczbę znaków alfabetycznych, białych i interpunkcyjnych w ciągu.
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
Użycie indeksowania opartego na znakach z właściwością Chars[] może być bardzo powolne w następujących warunkach:
- Wystąpienie StringBuilder jest duże (na przykład składa się z kilkudziesiąt tysięcy znaków).
- Jest StringBuilder "złożony". Oznacza to, że powtarzające się wywołania metod takich jak StringBuilder.Append automatycznie rozszerzyły atrybut StringBuilder.Capacity obiektu i przydzieliły do niego nowe segmenty pamięci.
Wydajność jest poważnie obniżona, ponieważ każdy dostęp do pojedynczego znaku musi przejść przez całą połączoną listę segmentów w celu znalezienia poprawnego buforu do zindeksowania.
Note
Nawet w przypadku dużego, "obszernego" obiektu StringBuilder, użycie właściwości Chars[] do dostępu opartego na indeksie do jednego lub niewielkiej liczby znaków ma znikomy wpływ na wydajność; zazwyczaj jest to operacja O(n). Znaczący wpływ na wydajność występuje podczas iterowania znaków w StringBuilder obiekcie, który jest operacją O(n^2).
Jeśli wystąpią problemy z wydajnością podczas korzystania z indeksowania opartego na znakach z StringBuilder obiektami, możesz użyć dowolnego z następujących obejść:
Przekonwertuj wystąpienie StringBuilder na String poprzez wywołanie metody ToString, a następnie uzyskaj dostęp do znaków w ciągu.
Skopiuj zawartość istniejącego StringBuilder obiektu do nowego, wstępnie utworzonego obiektu StringBuilder. Wydajność poprawia się, ponieważ nowy obiekt StringBuilder nie jest masywny. Przykład:
// 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)Ustaw początkową pojemność StringBuilder obiektu na wartość, która jest w przybliżeniu równa maksymalnemu oczekiwanemu StringBuilder(Int32) rozmiarowi, wywołując konstruktora. Należy pamiętać, że przydziela cały blok pamięci, nawet jeśli StringBuilder rzadko osiąga maksymalną pojemność.