StringInfo StringInfo StringInfo StringInfo Class

Definizione

Fornisce funzionalità per suddividere una stringa in elementi di testo e per scorrere tali elementi di testo.Provides functionality to split a string into text elements and to iterate through those text elements.

public ref class StringInfo
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class StringInfo
type StringInfo = class
Public Class StringInfo
Ereditarietà
StringInfoStringInfoStringInfoStringInfo
Attributi

Esempi

In questo esempio vengono GetTextElementEnumerator usati ParseCombiningCharacters i metodi e StringInfo della classe per modificare una stringa che contiene caratteri surrogati e combinati.This example uses the GetTextElementEnumerator and ParseCombiningCharacters methods of the StringInfo class to manipulate a string that contains surrogate and combining characters.

using namespace System;
using namespace System::Text;
using namespace System::Globalization;


// Show how to enumerate each real character (honoring surrogates)
// in a string.

void EnumTextElements(String^ combiningChars)
{
    // This StringBuilder holds the output results.
    StringBuilder^ sb = gcnew StringBuilder();

    // Use the enumerator returned from GetTextElementEnumerator
    // method to examine each real character.
    TextElementEnumerator^ charEnum =
        StringInfo::GetTextElementEnumerator(combiningChars);
    while (charEnum->MoveNext())
    {
        sb->AppendFormat("Character at index {0} is '{1}'{2}", 
            charEnum->ElementIndex, charEnum->GetTextElement(), 
            Environment::NewLine);
    }

    // Show the results.
    Console::WriteLine("Result of GetTextElementEnumerator:");
    Console::WriteLine(sb);
}


// Show how to discover the index of each real character
// (honoring surrogates) in a string.

void EnumTextElementIndexes(String^ combiningChars)
{
    // This StringBuilder holds the output results.
    StringBuilder^ sb = gcnew StringBuilder();

    // Use the ParseCombiningCharacters method to
    // get the index of each real character in the string.
    array <int>^ textElemIndex =
        StringInfo::ParseCombiningCharacters(combiningChars);

    // Iterate through each real character showing the character
    // and the index where it was found.
    for (int i = 0; i < textElemIndex->Length; i++)
    {
        sb->AppendFormat("Character {0} starts at index {1}{2}",
            i, textElemIndex[i], Environment::NewLine);
    }

    // Show the results.
    Console::WriteLine("Result of ParseCombiningCharacters:");
    Console::WriteLine(sb);
}

int main()
{

    // The string below contains combining characters.
    String^ combiningChars = L"a\u0304\u0308bc\u0327";

    // Show each 'character' in the string.
    EnumTextElements(combiningChars);

    // Show the index in the string where each 'character' starts.
    EnumTextElementIndexes(combiningChars);

};

// This code produces the following output.
//
// Result of GetTextElementEnumerator:
// Character at index 0 is 'a-"'
// Character at index 3 is 'b'
// Character at index 4 is 'c,'
//
// Result of ParseCombiningCharacters:
// Character 0 starts at index 0
// Character 1 starts at index 3
// Character 2 starts at index 4
using System;
using System.Text;
using System.Globalization;

public sealed class App {
   static void Main() {
      // The string below contains combining characters.
      String s = "a\u0304\u0308bc\u0327";

      // Show each 'character' in the string.
      EnumTextElements(s);

      // Show the index in the string where each 'character' starts.
      EnumTextElementIndexes(s);
   }

   // Show how to enumerate each real character (honoring surrogates) in a string.
   static void EnumTextElements(String s) {
      // This StringBuilder holds the output results.
      StringBuilder sb = new StringBuilder();

      // Use the enumerator returned from GetTextElementEnumerator 
      // method to examine each real character.
      TextElementEnumerator charEnum = StringInfo.GetTextElementEnumerator(s);
      while (charEnum.MoveNext()) {
         sb.AppendFormat(
           "Character at index {0} is '{1}'{2}",
           charEnum.ElementIndex, charEnum.GetTextElement(),
           Environment.NewLine);
      }

      // Show the results.
      Console.WriteLine("Result of GetTextElementEnumerator:");
      Console.WriteLine(sb);
   }

   // Show how to discover the index of each real character (honoring surrogates) in a string.
   static void EnumTextElementIndexes(String s) {
      // This StringBuilder holds the output results.
      StringBuilder sb = new StringBuilder();

      // Use the ParseCombiningCharacters method to 
      // get the index of each real character in the string.
      Int32[] textElemIndex = StringInfo.ParseCombiningCharacters(s);

      // Iterate through each real character showing the character and the index where it was found.
      for (Int32 i = 0; i < textElemIndex.Length; i++) {
         sb.AppendFormat(
            "Character {0} starts at index {1}{2}",
            i, textElemIndex[i], Environment.NewLine);
      }

      // Show the results.
      Console.WriteLine("Result of ParseCombiningCharacters:");
      Console.WriteLine(sb);
   }
}

// This code produces the following output.
//
// Result of GetTextElementEnumerator:
// Character at index 0 is 'a-"'
// Character at index 3 is 'b'
// Character at index 4 is 'c,'
// 
// Result of ParseCombiningCharacters:
// Character 0 starts at index 0
// Character 1 starts at index 3
// Character 2 starts at index 4
Imports System.Text
Imports System.Globalization

Public Module Example
   Public Sub Main()
      ' The string below contains combining characters.
      Dim s As String = "a" + ChrW(&h0304) + ChrW(&h0308) + "bc" + ChrW(&h0327)

      ' Show each 'character' in the string.
      EnumTextElements(s)

      ' Show the index in the string where each 'character' starts.
      EnumTextElementIndexes(s)
   End Sub

   ' Show how to enumerate each real character (honoring surrogates) in a string.
   Sub EnumTextElements(s As String)
      ' This StringBuilder holds the output results.
      Dim sb As New StringBuilder()

      ' Use the enumerator returned from GetTextElementEnumerator 
      ' method to examine each real character.
      Dim charEnum As TextElementEnumerator = StringInfo.GetTextElementEnumerator(s)
      Do While charEnum.MoveNext()
         sb.AppendFormat("Character at index {0} is '{1}'{2}",
                         charEnum.ElementIndex, 
                         charEnum.GetTextElement(),
                         Environment.NewLine)
      Loop

      ' Show the results.
      Console.WriteLine("Result of GetTextElementEnumerator:")
      Console.WriteLine(sb)
   End Sub

   ' Show how to discover the index of each real character (honoring surrogates) in a string.
   Sub EnumTextElementIndexes(s As String)
      ' This StringBuilder holds the output results.
      Dim sb As New StringBuilder()

      ' Use the ParseCombiningCharacters method to 
      ' get the index of each real character in the string.
      Dim textElemIndex() As Integer = StringInfo.ParseCombiningCharacters(s)

      ' Iterate through each real character showing the character and the index where it was found.
      For i As Int32 = 0 To textElemIndex.Length - 1
         sb.AppendFormat("Character {0} starts at index {1}{2}",
                         i, textElemIndex(i), Environment.NewLine)
      Next

      ' Show the results.
      Console.WriteLine("Result of ParseCombiningCharacters:")
      Console.WriteLine(sb)
   End Sub
End Module
' The example displays the following output:
'       Result of GetTextElementEnumerator:
'       Character at index 0 is 'a-"'
'       Character at index 3 is 'b'
'       Character at index 4 is 'c,'
'       
'       Result of ParseCombiningCharacters:
'       Character 0 starts at index 0
'       Character 1 starts at index 3
'       Character 2 starts at index 4

Commenti

.NET definisce un elemento di testo come un'unità di testo visualizzata come un singolo carattere, ovvero un grafema..NET defines a text element as a unit of text that is displayed as a single character, that is, a grapheme. Un elemento di testo può essere un carattere di base, una coppia di surrogati o una sequenza di caratteri di combinazione.A text element can be a base character, a surrogate pair, or a combining character sequence. Lo standard Unicode definisce una coppia di surrogati come rappresentazione di caratteri codificati per un singolo carattere astratto costituito da una sequenza di due unità di codice, in cui la prima unità della coppia è un surrogato alto e il secondo è un surrogato basso.The Unicode Standard defines a surrogate pair as a coded character representation for a single abstract character that consists of a sequence of two code units, where the first unit of the pair is a high surrogate and the second is a low surrogate. Lo standard Unicode definisce una sequenza di caratteri di combinazione come una combinazione di un carattere di base e uno o più caratteri combinati.The Unicode Standard defines a combining character sequence as a combination of a base character and one or more combining characters. Una coppia di surrogati può rappresentare un carattere di base o un carattere di combinazione.A surrogate pair can represent a base character or a combining character.

La classe StringInfo consente di utilizzare una stringa come serie di elementi testuali anziché singoli oggetti Char.The StringInfo class enables you to work with a string as a series of textual elements rather than individual Char objects.

Per creare un'istanza StringInfo di un oggetto che rappresenta una stringa specificata, è possibile eseguire una delle operazioni seguenti:To instantiate a StringInfo object that represents a specified string, you can do either of the following:

È possibile utilizzare i singoli elementi di testo di una stringa in due modi:You can work with the individual text elements in a string in two ways:

Nell'esempio seguente vengono illustrate entrambe le modalità di utilizzo degli elementi di testo in una stringa.The following example illustrates both ways of working with the text elements in a string. Vengono create due stringhe:It creates two strings:

  • strCombining, una stringa di caratteri arabi contenente tre elementi di testo con più oggetti Char.strCombining, which is a string of Arabic characters that includes three text elements with multiple Char objects. Il primo elemento di testo è il carattere di base ARABIC LETTER ALEF (U+-627) seguito da ARABIC HAMZA BELOW (U+-655) e ARABIC KASRA (U+0650).The first text element is the base character ARABIC LETTER ALEF (U+-627) followed by ARABIC HAMZA BELOW (U+-655) and ARABIC KASRA (U+0650). Il secondo elemento di testo è ARABIC LETTER HEH (U+0647) seguito da ARABIC FATHA (U+-64E).The second text element is ARABIC LETTER HEH (U+0647) followed by ARABIC FATHA (U+-64E). Il terzo elemento di testo è ARABIC LETTTER BEH (U+0628) seguito da ARABIC DAMMATAN (U+064C).The third text element is ARABIC LETTTER BEH (U+0628) followed by ARABIC DAMMATAN (U+064C).

  • strSurrogates, ovvero una stringa che include tre coppie di surrogati: GREEK ACROFONICO FIVE TALENTs (U + 10148) del piano multilingue supplementare, U + 20026 dal piano di ideogrammi supplementare e U + F1001 dall'area utente privata.strSurrogates, which is a string that includes three surrogate pairs: GREEK ACROPHONIC FIVE TALENTS (U+10148) from the Supplementary Multilingual Plane, U+20026 from the Supplementary Ideographic Plane, and U+F1001 from the private user area. La codifica UTF-16 di ciascun carattere è una coppia di surrogati costituita da un surrogato alto seguito da un surrogato basso.The UTF-16 encoding of each character is a surrogate pair that consists of a high surrogate followed by a low surrogate.

Ogni stringa viene analizzata una volta dal metodo ParseCombiningCharacters e successivamente dal metodo GetTextElementEnumerator.Each string is parsed once by the ParseCombiningCharacters method and then by the GetTextElementEnumerator method. Entrambi i metodi analizzano correttamente gli elementi di testo nelle due stringhe e visualizzano i risultati dell'operazione di analisi.Both methods correctly parse the text elements in the two strings and display the results of the parsing operation.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // The Unicode code points specify Arabic base characters and 
      // combining character sequences.
      string strCombining = "\u0627\u0655\u0650\u064A\u0647\u064E" +
                            "\u0627\u0628\u064C";

      // The Unicode code points specify private surrogate pairs.
      string strSurrogates = Char.ConvertFromUtf32(0x10148) +
                             Char.ConvertFromUtf32(0x20026) + "a" +
                             Char.ConvertFromUtf32(0xF1001);
      
      EnumerateTextElements(strCombining);
      EnumerateTextElements(strSurrogates);
   }

   public static void EnumerateTextElements(string str)
   {
      // Get the Enumerator.
      TextElementEnumerator teEnum = null;      

      // Parse the string using the ParseCombiningCharacters method.
      Console.WriteLine("\nParsing with ParseCombiningCharacters:");
      int[] teIndices = StringInfo.ParseCombiningCharacters(str);
      
      for (int i = 0; i < teIndices.Length; i++) {
         if (i < teIndices.Length - 1)
            Console.WriteLine("Text Element {0} ({1}..{2})= {3}", i, 
               teIndices[i], teIndices[i + 1] - 1, 
               ShowHexValues(str.Substring(teIndices[i], teIndices[i + 1] - 
                             teIndices[i])));
         else
            Console.WriteLine("Text Element {0} ({1}..{2})= {3}", i, 
               teIndices[i], str.Length - 1, 
               ShowHexValues(str.Substring(teIndices[i])));
      }
      Console.WriteLine();

      // Parse the string with the GetTextElementEnumerator method.
      Console.WriteLine("Parsing with TextElementEnumerator:");
      teEnum = StringInfo.GetTextElementEnumerator(str);

      int teCount = - 1;

      while (teEnum.MoveNext()) {
         // Displays 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, ShowHexValues((string)(teEnum.Current)));
      }
   }
   
   private static string ShowHexValues(string s)
   {
      string hexString = "";
      foreach (var ch in s)
         hexString += String.Format("{0:X4} ", Convert.ToUInt16(ch));

      return hexString;
   }
}
// The example displays the following output:
//       Parsing with ParseCombiningCharacters:
//       Text Element 0 (0..2)= 0627 0655 0650
//       Text Element 1 (3..3)= 064A
//       Text Element 2 (4..5)= 0647 064E
//       Text Element 3 (6..6)= 0627
//       Text Element 4 (7..8)= 0628 064C
//       
//       Parsing with TextElementEnumerator:
//       Text Element 0 (0..2)= 0627 0655 0650
//       Text Element 1 (3..3)= 064A
//       Text Element 2 (4..5)= 0647 064E
//       Text Element 3 (6..6)= 0627
//       Text Element 4 (7..8)= 0628 064C
//       
//       Parsing with ParseCombiningCharacters:
//       Text Element 0 (0..1)= D800 DD48
//       Text Element 1 (2..3)= D840 DC26
//       Text Element 2 (4..4)= 0061
//       Text Element 3 (5..6)= DB84 DC01
//       
//       Parsing with TextElementEnumerator:
//       Text Element 0 (0..1)= D800 DD48
//       Text Element 1 (2..3)= D840 DC26
//       Text Element 2 (4..4)= 0061
//       Text Element 3 (5..6)= DB84 DC01
Imports System.Globalization

Public Module Example
   Public Sub Main()
      ' The Unicode code points specify Arabic base characters and 
      ' combining character sequences.
      Dim strCombining As String = ChrW(&H627) & ChrW(&h0655) + ChrW(&H650) & 
              ChrW(&H64A) & ChrW(&H647) & ChrW(&H64E) & ChrW(&H627) & 
              ChrW(&H628) & ChrW(&H64C)

      ' The Unicode code points specify private surrogate pairs.
      Dim strSurrogates As String = Char.ConvertFromUtf32(&h10148) +
                                    Char.ConvertFromUtf32(&h20026) + "a" +
                                    Char.ConvertFromUtf32(&hF1001)
      
      EnumerateTextElements(strCombining)
      EnumerateTextElements(strSurrogates)
   End Sub

   Public Sub EnumerateTextElements(str As String)
      ' Get the Enumerator.
      Dim teEnum As TextElementEnumerator = Nothing      

      ' Parse the string using the ParseCombiningCharacters method.
      Console.WriteLine()
      Console.WriteLine("Parsing with ParseCombiningCharacters:")
      Dim teIndices As Integer() = StringInfo.ParseCombiningCharacters(str)
      
      For i As Integer = 0 To teIndices.Length - 1
         If i < teIndices.Length - 1 Then
            Console.WriteLine("Text Element {0} ({1}..{2})= {3}", i, 
               TEIndices(i), TEIndices((i + 1)) - 1, 
               ShowHexValues(str.Substring(TEIndices(i), TEIndices((i + 1)) - 
                             teIndices(i))))
         Else
            Console.WriteLine("Text Element {0} ({1}..{2})= {3}", i, 
               teIndices(i), str.Length - 1, 
               ShowHexValues(str.Substring(teIndices(i))))
         End If
      Next
      Console.WriteLine()

      ' Parse the string with the GetTextElementEnumerator method.
      Console.WriteLine("Parsing with TextElementEnumerator:")
      teEnum = StringInfo.GetTextElementEnumerator(str)

      Dim TECount As Integer = - 1

      While teEnum.MoveNext()
         ' 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, ShowHexValues(CStr(teEnum.Current)))
      End While
   End Sub
   
   Private Function ShowHexValues(s As String) As String
      Dim hexString As String = ""
      For Each ch In s
         hexString += String.Format("{0:X4} ", Convert.ToUInt16(ch))
      Next
      Return hexString
   End Function
End Module
' The example displays the following output:
'       Parsing with ParseCombiningCharacters:
'       Text Element 0 (0..2)= 0627 0655 0650
'       Text Element 1 (3..3)= 064A
'       Text Element 2 (4..5)= 0647 064E
'       Text Element 3 (6..6)= 0627
'       Text Element 4 (7..8)= 0628 064C
'       
'       Parsing with TextElementEnumerator:
'       Text Element 0 (0..2)= 0627 0655 0650
'       Text Element 1 (3..3)= 064A
'       Text Element 2 (4..5)= 0647 064E
'       Text Element 3 (6..6)= 0627
'       Text Element 4 (7..8)= 0628 064C
'       
'       Parsing with ParseCombiningCharacters:
'       Text Element 0 (0..1)= D800 DD48
'       Text Element 1 (2..3)= D840 DC26
'       Text Element 2 (4..4)= 0061
'       Text Element 3 (5..6)= DB84 DC01
'       
'       Parsing with TextElementEnumerator:
'       Text Element 0 (0..1)= D800 DD48
'       Text Element 1 (2..3)= D840 DC26
'       Text Element 2 (4..4)= 0061
'       Text Element 3 (5..6)= DB84 DC01

Note per i chiamanti

Internamente, i metodi della StringInfo classe chiamano i metodi CharUnicodeInfo della classe per determinare le categorie di caratteri.Internally, the methods of the StringInfo class call the methods of the CharUnicodeInfo class to determine character categories. A partire da .NET Framework 4.6.2, la classificazione dei caratteri è basata sullo standard Unicode, versione 8.0.0.Starting with the .NET Framework 4.6.2, character classification is based on The Unicode Standard, Version 8.0.0. Per il .NET Framework 4 tramite il .NET Framework 4.6.1, è basato sullo standard Unicode, versione 6.3.0.For the .NET Framework 4 through the .NET Framework 4.6.1, it is based on The Unicode Standard, Version 6.3.0. In .NET Core si basa sullo standard Unicode, versione 8.0.0.In .NET Core, it is based on The Unicode Standard, Version 8.0.0.

Costruttori

StringInfo() StringInfo() StringInfo() StringInfo()

Inizializza una nuova istanza della classe StringInfo.Initializes a new instance of the StringInfo class.

StringInfo(String) StringInfo(String) StringInfo(String) StringInfo(String)

Inizializza una nuova istanza della classe StringInfo sulla stringa specificata.Initializes a new instance of the StringInfo class to a specified string.

Proprietà

LengthInTextElements LengthInTextElements LengthInTextElements LengthInTextElements

Ottiene il numero di elementi di testo nell'oggetto StringInfo corrente.Gets the number of text elements in the current StringInfo object.

String String String String

Ottiene o imposta il valore dell'oggetto StringInfo corrente.Gets or sets the value of the current StringInfo object.

Metodi

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Indica se l'oggetto StringInfo corrente è uguale a un oggetto specificato.Indicates whether the current StringInfo object is equal to a specified object.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Calcola un codice hash per il valore dell'oggetto StringInfo corrente.Calculates a hash code for the value of the current StringInfo object.

GetNextTextElement(String) GetNextTextElement(String) GetNextTextElement(String) GetNextTextElement(String)

Ottiene il primo elemento di testo in una stringa specificata.Gets the first text element in a specified string.

GetNextTextElement(String, Int32) GetNextTextElement(String, Int32) GetNextTextElement(String, Int32) GetNextTextElement(String, Int32)

Ottiene l'elemento di testo in corrispondenza dell'indice specificato della stringa indicata.Gets the text element at the specified index of the specified string.

GetTextElementEnumerator(String) GetTextElementEnumerator(String) GetTextElementEnumerator(String) GetTextElementEnumerator(String)

Restituisce un enumeratore che consente di scorrere gli elementi di testo dell'intera stringa.Returns an enumerator that iterates through the text elements of the entire string.

GetTextElementEnumerator(String, Int32) GetTextElementEnumerator(String, Int32) GetTextElementEnumerator(String, Int32) GetTextElementEnumerator(String, Int32)

Restituisce un enumeratore che consente di scorrere gli elementi di testo della stringa, a partire dall'indice specificato.Returns an enumerator that iterates through the text elements of the string, starting at the specified index.

GetType() GetType() GetType() GetType()

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Inherited from Object)
ParseCombiningCharacters(String) ParseCombiningCharacters(String) ParseCombiningCharacters(String) ParseCombiningCharacters(String)

Restituisce gli indici di ciascun carattere base, surrogato alto o carattere di controllo all'interno della stringa specificata.Returns the indexes of each base character, high surrogate, or control character within the specified string.

SubstringByTextElements(Int32) SubstringByTextElements(Int32) SubstringByTextElements(Int32) SubstringByTextElements(Int32)

Recupera una sottostringa degli elementi di testo dall'oggetto StringInfo corrente a partire da un elemento di testo specificato fino all'ultimo elemento di testo.Retrieves a substring of text elements from the current StringInfo object starting from a specified text element and continuing through the last text element.

SubstringByTextElements(Int32, Int32) SubstringByTextElements(Int32, Int32) SubstringByTextElements(Int32, Int32) SubstringByTextElements(Int32, Int32)

Recupera una sottostringa di elementi di testo dall'oggetto StringInfo corrente a partire da un elemento di testo specificato fino al numero specificato di elementi di testo.Retrieves a substring of text elements from the current StringInfo object starting from a specified text element and continuing through the specified number of text elements.

ToString() ToString() ToString() ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.Returns a string that represents the current object.

(Inherited from Object)

Si applica a

Vedi anche