StringBuilder.Chars[Int32] Vlastnost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Získá nebo nastaví znak na zadané pozici znaku v této instanci.
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
Pozice znaku.
Hodnota vlastnosti
Znak Unicode na pozici index
.
Výjimky
index
je mimo hranice této instance při nastavování znaku.
index
při získávání znaku je mimo hranice této instance.
Poznámky
Parametr index
je pozice znaku v objektu StringBuilder. První znak v řetězci je v indexu 0. Délka řetězce je počet znaků, které obsahuje. Poslední přístupný znak instance je v indexu StringBuilderLength – 1.
Chars[Int32] je výchozí vlastnost StringBuilder třídy. V jazyce C# je to indexer. To znamená, že jednotlivé znaky lze načíst z Chars[Int32] vlastnosti, jak je znázorněno v následujícím příkladu, který počítá počet znaků abecedy, prázdných znaků a interpunkčních znaménka v řetězci.
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
Použití indexování na základě znaků s Chars[] vlastností může být extrémně pomalé za následujících podmínek:
- Instance StringBuilder je velká (například se skládá z několika desítek tisíc znaků).
- Je StringBuilder to "chunky". To znamená, že opakovaná volání metod, jako StringBuilder.Append jsou, automaticky rozbalila vlastnost objektu StringBuilder.Capacity a přidělila mu nové bloky paměti.
Výkon je vážně ovlivněn, protože každý přístup ke znakům provede celý propojený seznam bloků dat a najde správnou vyrovnávací paměť, do které se má indexovat.
Poznámka
I u velkého "kusového" StringBuilder objektu má použití Chars[] vlastnosti pro přístup na základě indexu k jednomu nebo malému počtu znaků zanedbatelný dopad na výkon. Obvykle se jedná o operaci O(n). K významnému dopadu na výkon dochází při iteraci znaků v objektuStringBuilder, což je operace O(n^2).
Pokud při používání indexování na základě znaků s objekty narazíte na problémy s StringBuilder výkonem, můžete použít některé z následujících alternativních řešení:
Převeďte StringBuilder instanci na String instanci voláním ToString metody a pak otevřete znaky v řetězci.
Zkopírujte obsah existujícího StringBuilder objektu do nového objektu s předběžnou velikostí StringBuilder . Výkon se zvyšuje, protože nový StringBuilder objekt není chudší. Příklad:
// 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)
Nastavte počáteční kapacitu objektu StringBuilder na hodnotu, která se přibližně rovná jeho maximální očekávané velikosti voláním konstruktoru StringBuilder(Int32) . Všimněte si, že se tím přidělí celý blok paměti, i když StringBuilder zřídka dosáhne své maximální kapacity.