StringBuilder.Chars[Int32] StringBuilder.Chars[Int32] StringBuilder.Chars[Int32] StringBuilder.Chars[Int32] Property

정의

이 인스턴트에서 특정 위치에 있는 문자를 가져오거나 설정합니다.Gets or sets the character at the specified character position in this instance.

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

매개 변수

index
Int32 Int32 Int32 Int32

문자의 위치입니다.The position of the character.

속성 값

index 위치에 있는 유니코드 문자입니다.The Unicode character at position index.

예외

문자를 설정하는 동안 index가 이 인스턴스의 범위를 벗어납니다.index is outside the bounds of this instance while setting a character.

문자를 가져오는 동안 index가 이 인스턴스의 범위를 벗어납니다.index is outside the bounds of this instance while getting a character.

설명

합니다 index 매개 변수는 내 문자 위치를 StringBuilder입니다.The index parameter is the position of a character within the StringBuilder. 문자열의 첫 번째 문자는 인덱스 0에 있습니다.The first character in the string is at index 0. 문자열의 길이가 포함 된 문자의 수입니다.The length of a string is the number of characters it contains. 마지막 액세스할 수 있는 문자를 StringBuilder 인스턴스가 인덱스 Length -1입니다.The last accessible character of a StringBuilder instance is at index Length - 1.

Chars[Int32] 기본 속성을 StringBuilder 클래스입니다.Chars[Int32] is the default property of the StringBuilder class. C#에서는 인덱서 것입니다.In C#, it is an indexer. 즉,에서 개별 문자를 검색할 수 있습니다는 Chars[Int32] 공백, 영문자의 개수에 다음 예제에 표시 된 대로 속성과 문자열의 문장 부호 문자입니다.This means that individual characters can be retrieved from the Chars[Int32] property as shown in the following example, which counts the number of alphabetic, white-space, and punctuation characters in a string.

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
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

성능 및 문자 기반 인덱싱을Performance and character-based indexing

Chars[Int32] 속성에서 문자 기반 인덱싱을 사용하면 다음과 같은 조건 하에서 성능이 매우 느려질 수 있습니다.Using character-based indexing with the Chars[Int32] property can be extremely slow under the following conditions:

각 문자 액세스가 인덱싱할 올바른 버퍼를 찾기 위해 연결된 전체 청크 목록을 확인하기 때문에 성능이 심각하게 저하됩니다.Performance is severely impacted because each character access walks the entire linked list of chunks to find the correct buffer to index into.

참고

대규모 "청크" StringBuilder 개체의 경우 하나 이하의 문자에 대한 인덱스 기반 액세스에 Chars[Int32] 속성을 사용하면 성능에 미치는 영향이 적습니다. 일반적으로 0(n) 개 작업에 영향을 줍니다.Even for a large "chunky" StringBuilder object, using the Chars[Int32] property for index-based access to one or a small number of characters has a negligible performance impact; typically, it is an 0(n) operation. StringBuilder 개체에서 문자를 반복할 때 성능에 상당한 영향이 발생합니다. O(n^2) 개 작업에 영향을 줍니다.The significant performance impact occurs when iterating the characters in the StringBuilder object, which is an O(n^2) operation.

StringBuilder 개체에서 문자 기반 인덱싱을 사용할 때 성능 문제가 발생하는 경우 다음 방법 중 하나를 사용할 수 있습니다.If you encounter performance issues when using character-based indexing with StringBuilder objects, you can use any of the following workarounds:

  • ToString 메서드를 호출하여 StringBuilder 인스턴스를 String으로 변환한 다음, 문자열의 문자에 액세스합니다.Convert the StringBuilder instance to a String by calling the ToString method, then access the characters in the string.

  • 기존 StringBuilder 개체의 콘텐츠를 크기가 미리 지정된 새로운 StringBuilder 개체로 복사합니다.Copy the contents of the existing StringBuilder object to a new pre-sized StringBuilder object. 새로운 StringBuilder 개체가 청크가 아니기 때문에 성능이 향상됩니다.Performance improves because the new StringBuilder object is not chunky. 예:For example:

    // 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)
    
  • StringBuilder(Int32) 생성자를 호출하여 StringBuilder 개체의 초기 용량을 예상된 최대 크기와 대략 동일한 값으로 설정합니다.Set the initial capacity of the StringBuilder object to a value that is approximately equal to its maximum expected size by calling the StringBuilder(Int32) constructor. StringBuilder가 거의 최대 용량에 도달하더라도 메모리의 전체 블록을 할당합니다.Note that this allocates the entire block of memory even if the StringBuilder rarely reaches its maximum capacity.

적용 대상

추가 정보