Compartilhar via


Seqüência de caracteres de indexação

The System.Globalization.StringInfo classe fornece métodos que permitem a você dividir uma cadeia de caracteres em elementos de texto e iterar por meio desses elementos de texto. Um elemento de texto é uma unidade de texto que é exibido sistema autônomo um único caractere chamado um grapheme.Um elemento de texto pode ser um caractere base, um emparelhar substituto ou um caractere sem espaçamento sequência.Para obter mais informações sobre pares substitutos e combinar seqüências de caractere, consulte Suporte a Unicode para pares substitutos e seqüências de caractere sem espaçamento.

Use o StringInfo.GetTextElementEnumerator método para criar um enumerador possível iterar por meio dos elementos de uma seqüência de caracteres. Use o StringInfo.ParseCombiningCharacters método para retornar os índices de cada caractere base, substituto alto ou caractere de controle em uma seqüência de caracteres especificada.

No exemplo de código a seguir, uma seqüência de caractere de árabe caractere contendo caractere sem espaçamento seqüências é criado.In strCombining, por exemplo, o Unicode código U + 0625 representa um árabe basear caractere (Letra árabe Alef com Hamza abaixo) e o código Unicode U + 0650 representa um árabe caractere sem espaçamento (Kasra árabe). Juntos, esses códigos representam uma combinação sequência de caractere e portanto deve ser analisada sistema autônomo um elemento de texto único.Em seguida, uma seqüência de caracteres que contém os pares substitutos é criada.In strSurrogates, por exemplo, o código Unicode U + DACE representa um substituto alto e o código Unicode U + DEFF representa um substituto baixo. Juntos, esses códigos representam um emparelhar substituto e devem ser analisados sistema autônomo um elemento de texto único.Cada seqüência de caracteres é analisada uma vez usando o ParseCombiningCharacters método e novamente usando o GetTextElementEnumerator método.Os dois métodos analisar corretamente os elementos de texto em strCombining em índices 0, 2, 3, 5 e 6. Os dois métodos analisar corretamente os elementos de texto em strSurrogates em índices 0, 2, 4, 5 e 6. Os resultados das operações de análise são exibidos.

Imports System
Imports System.IO
Imports System.Globalization
Imports System.Text
Imports Microsoft.VisualBasic

Public Class StringInfoSample

   Public Shared Sub Main()
      ' Creates a string with text elements at <0;2;3;5;6>.
      ' The Unicode code points specify Arabic 
      ' combining character sequences.
      Dim strCombining As String = ChrW(&H625) & ChrW(&H650) & _
         ChrW(&H64A) & ChrW(&H647) & ChrW(&H64E) & ChrW(&H627) & _
         ChrW(&H628) & ChrW(&H64C)

      ' Creates a string with text elements at <0;2;4;5;6>.
      'The Unicode code points specify private surrogate pairs.
      Dim strSurrogates As String = ChrW(&HDACE) & ChrW(&HDEFF) & _
         ChrW(&HDAAF) & ChrW(&HDEFC) & "a" & ChrW(&HD8BF) & ChrW(&HDD99)
      
      EnumerateTextElements(strCombining)
      EnumerateTextElements(strSurrogates)
   End Sub

   Public Shared Sub EnumerateTextElements(str As String)
      ' Creates a TextElementEnumerator.
      Dim TEIndices As Integer() = Nothing
      Dim TEEnum As TextElementEnumerator = Nothing      

      ' Parses the string using the ParseCombiningCharacters() method.
      Console.WriteLine(ControlChars.Newline + "Parsing '{0}' Using _
         ParseCombiningCharacters()...", str)
      Dim i As Integer
      TEIndices = StringInfo.ParseCombiningCharacters(str)
      For i = 0 To (TEIndices.Length - 1) - 1
         Console.WriteLine("Text Element {0} ({1}..{2})= {3}", i, _
            TEIndices(i), TEIndices((i + 1)) - 1, _
            str.Substring(TEIndices(i), TEIndices((i + 1)) - _
            TEIndices(i)))
      Next i
      Console.WriteLine("Text Element {0} ({1}..{2})= {3}", i, _
         TEIndices(i), str.Length - 1, str.Substring(TEIndices(i)))

      ' Parses the string using the GetTextElementEnumerator method.
      Console.WriteLine(ControlChars.Newline + "Parsing '{0}' Using _
         TextElementEnumerator...", str)
      TEEnum = StringInfo.GetTextElementEnumerator(str)

      Dim Continue As Boolean = False
      Dim TECount As Integer = - 1

      ' Note: Begins at element -1 (none).
      Continue = TEEnum.MoveNext()
      While Continue
         ' Prints the current element.
         ' Both GetTextElement() and Current retrieve the current
         ' text element. The latter returns it as an Object.
         TECount += 1
         Console.WriteLine("Text Element {0} ({1}..{2})= {3}", TECount, _
            TEEnum.ElementIndex, TEEnum.ElementIndex + _
            TEEnum.GetTextElement().Length - 1, TEEnum.Current)

         ' Moves to the next element.
         Continue = TEEnum.MoveNext()
      End While
   End Sub
End Class
using System;
using System.IO;
using System.Globalization;
using System.Text;

public class StringInfoSample
{
   public static void Main()
   {
      // Creates a string with text elements at <0;2;3;5;6>.
      // The Unicode code points specify Arabic 
      // combining character sequences.
      string strCombining =   
            "\u0625\u0650\u064A\u0647\u064E\u0627\u0628\u064C";
      // Creates a string with text elements at <0;2;4;5;6>.
      // The Unicode code points specify private surrogate pairs.
      string strSurrogates = "\uDACE\uDEFF\uDAAF\uDEFCa\uD8BF\uDD99"; 

      EnumerateTextElements(strCombining);
      EnumerateTextElements(strSurrogates);
   }

   public static void EnumerateTextElements(string str)
   {
      // Creates a TextElementEnumerator.
      int[] TEIndices = null;
      TextElementEnumerator TEEnum = null;

      // Parses the string using the ParseCombiningCharacters() method.
      Console.WriteLine
         ("\r\nParsing '{0}' Using ParseCombiningCharacters()...",str);
      int i;
      TEIndices = StringInfo.ParseCombiningCharacters(str);
      for (i = 0; i < (TEIndices.Length - 1); i++)
      {
         Console.WriteLine
            ("Text Element {0} ({1}..{2})= 
            {3}",i,TEIndices[i],TEIndices[i+1] - 1,
            str.Substring(TEIndices[i],TEIndices[i+1] - TEIndices[i]));
      }
      Console.WriteLine
         ("Text Element {0} ({1}..{2})= {3}",i,TEIndices[i],str.Length - 
         1, str.Substring(TEIndices[i]));

      // Parses the string using the GetTextElementEnumerator method.
      Console.WriteLine
         ("\r\nParsing '{0}' Using TextElementEnumerator...",str);
      TEEnum = StringInfo.GetTextElementEnumerator(str);

      bool Continue = false;
      int TECount = -1;

      // Note: Begins at element -1 (none).
      Continue = TEEnum.MoveNext();
      while (Continue)
      {
         // Prints the current element.
         // Both GetTextElement() and Current retrieve the current
         // text element. The latter returns it as an Object.
         TECount++;
         Console.WriteLine("Text Element {0} ({1}..{2})=  
               {3}",TECount,TEEnum.ElementIndex,
               TEEnum.ElementIndex + TEEnum.GetTextElement().Length - 1, 
               TEEnum.Current);

         // Moves to the next element.
         Continue = TEEnum.MoveNext();
         }
   }
}
Observação:

Se você executar esse código em um aplicativo de console, os elementos de texto Unicode especificados não serão exibidos corretamente porque o ambiente do console não oferece suporte a todos os caracteres Unicode.

Consulte também

Conceitos

Unicode no .NET estrutura

Referência

StringInfo

Outros recursos

Codificação e localização