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
jest poza granicami tego wystąpienia podczas ustawiania znaku.
index
jest poza granicami tego wystąpienia podczas uzyskiwania znaku.
Uwagi
Parametr index
jest pozycją znaku w obiekcie StringBuilder. Pierwszy znak w ciągu znajduje się w indeksie 0. Długość ciągu to liczba znaków, które zawiera. Ostatni dostępny znak StringBuilder wystąpienia znajduje się w indeksie 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, który 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
Korzystanie z indeksowania opartego Chars[] na znakach z właściwością może być bardzo powolne w następujących warunkach:
- Wystąpienie StringBuilder jest duże (na przykład składa się z kilku dziesiątek tysięcy znaków).
- To StringBuilder jest "fragmenty". Oznacza to, że powtarzające się wywołania metod, takie jak StringBuilder.Append automatycznie rozszerzyły właściwość obiektu StringBuilder.Capacity i przydzieliły do niego nowe fragmenty pamięci.
Wydajność ma poważny wpływ, ponieważ każdy dostęp do znaków przechodzi przez całą połączoną listę fragmentów w celu znalezienia poprawnego buforu do indeksowania.
Uwaga
Nawet w przypadku dużego obiektu "fragmenty" StringBuilder użycie Chars[] właściwości dla dostępu opartego na indeksie do jednej lub małej liczby znaków ma nieznaczny 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 StringBuilder wystąpienie na element String , wywołując metodę ToString , a następnie uzyskaj dostęp do znaków w ciągu.
Skopiuj zawartość istniejącego StringBuilder obiektu do nowego obiektu o rozmiarze StringBuilder wstępnym. Wydajność poprawia się, ponieważ nowy StringBuilder obiekt nie jest fragmenty. Na 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 rozmiarowi StringBuilder(Int32) , wywołując konstruktora. Należy pamiętać, że przydziela cały blok pamięci, nawet jeśli StringBuilder rzadko osiąga maksymalną pojemność.