StringInfo Klas

Definitie

Biedt functionaliteit voor het splitsen van een tekenreeks in tekstelementen en om deze tekstelementen te herhalen.

public ref class StringInfo
public class StringInfo
[System.Serializable]
public class StringInfo
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class StringInfo
type StringInfo = class
[<System.Serializable>]
type StringInfo = class
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type StringInfo = class
Public Class StringInfo
Overname
StringInfo
Kenmerken

Voorbeelden

In dit voorbeeld worden de GetTextElementEnumerator en ParseCombiningCharacters methoden van de StringInfo klasse gebruikt om een tekenreeks te bewerken die surrogaat bevat en tekens combineert.

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 'ā̈'
// Character at index 3 is 'b'
// Character at index 4 is 'ç'
//
// 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 'ā̈'
'       Character at index 3 is 'b'
'       Character at index 4 is 'ç'
'       
'       Result of ParseCombiningCharacters:
'       Character 0 starts at index 0
'       Character 1 starts at index 3
'       Character 2 starts at index 4

Opmerkingen

.NET definieert een tekstelement als een teksteenheid die wordt weergegeven als één teken, dat wil gezegd een grafeme. Een tekstelement kan een basisteken, een surrogaatpaar of een combinatietekenreeks zijn. De Unicode-standaard definieert een surrogaatpaar als een gecodeerde tekenweergave voor één abstract teken dat bestaat uit een reeks van twee code-eenheden, waarbij de eerste eenheid van het paar een hoog surrogaat is en de tweede een laag surrogaat is. De Unicode-standaard definieert een combinatietekenreeks als een combinatie van een basisteken en een of meer combinaties van tekens. Een surrogaatpaar kan een basisteken of een combinatieteken vertegenwoordigen.

Met de StringInfo klasse kunt u met een tekenreeks werken als een reeks tekstuele elementen in plaats van afzonderlijke Char objecten.

Als u een StringInfo object wilt instantiëren dat een opgegeven tekenreeks vertegenwoordigt, kunt u een van de volgende handelingen uitvoeren:

U kunt op twee manieren met de afzonderlijke tekstelementen in een tekenreeks werken:

  • Door elk tekstelement op te sommen. Hiervoor roept u de GetTextElementEnumerator methode aan en roept u de MoveNext methode vervolgens herhaaldelijk aan op het geretourneerde TextElementEnumerator object totdat de methode wordt geretourneerd false.

  • Door de ParseCombiningCharacters methode aan te roepen om een matrix op te halen die de beginindex van elk tekstelement bevat. Vervolgens kunt u afzonderlijke tekstelementen ophalen door deze indexen door te geven aan de SubstringByTextElements methode.

In het volgende voorbeeld ziet u beide manieren om met de tekstelementen in een tekenreeks te werken. Er worden twee tekenreeksen gemaakt:

  • strCombining, een tekenreeks met Arabische tekens die drie tekstelementen met meerdere Char objecten bevat. Het eerste tekstelement is het basisteken ARABISCHE LETTER ALEF (U+0627), gevolgd door ARABISCHE HAMZA BELOW (U+0655) en ARABISCHE KASRA (U+0650). Het tweede tekstelement is ARABISCHE LETTER HEH (U+0647), gevolgd door ARABISCHE FATHA (U+064E). Het derde tekstelement is ARABISCHE LETTER BEH (U+0628), gevolgd door ARABISCHE DAMMATAN (U+064C).

  • strSurrogates, een tekenreeks met drie surrogaatparen: GRIEKSE ACROPHONIC FIVE TALENT (U+10148) van het Aanvullende Meertalige Vlak, U+20026 van het Aanvullende Ideographic Plane en U+F1001 uit het privégebruikersgebied. De UTF-16-codering van elk teken is een surrogaatpaar dat bestaat uit een hoog surrogaat gevolgd door een lage surrogaat.

Elke tekenreeks wordt eenmaal geparseerd door de ParseCombiningCharacters methode en vervolgens door de GetTextElementEnumerator methode. Beide methoden parseren de tekstelementen in de twee tekenreeksen correct en geven de resultaten van de parseringsbewerking weer.

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 += $"{(ushort)ch:X4} ";

      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

Notities voor bellers

Intern roepen de methoden van de StringInfo klasse de methoden van de CharUnicodeInfo klasse aan om tekencategorieën te bepalen. Vanaf het .NET Framework 4.6.2 is tekenclassificatie gebaseerd op De Unicode-standaard, versie 8.0.0. Voor het .NET Framework 4 tot en met het .NET Framework 4.6.1 is deze gebaseerd op De Unicode-standaard, versie 6.3.0. In .NET Core is deze gebaseerd op De Unicode-standaard, versie 8.0.0.

Constructors

Name Description
StringInfo()

Initialiseert een nieuw exemplaar van de StringInfo klasse.

StringInfo(String)

Initialiseert een nieuw exemplaar van de StringInfo klasse naar een opgegeven tekenreeks.

Eigenschappen

Name Description
LengthInTextElements

Hiermee haalt u het aantal tekstelementen in het huidige StringInfo object op.

String

Hiermee haalt u de waarde van het huidige StringInfo object op of stelt u deze in.

Methoden

Name Description
Equals(Object)

Geeft aan of het huidige StringInfo object gelijk is aan een opgegeven object.

Equals(Object)

Bepaalt of het opgegeven object gelijk is aan het huidige object.

(Overgenomen van Object)
GetHashCode()

Berekent een hashcode voor de waarde van het huidige StringInfo object.

GetHashCode()

Fungeert als de standaardhashfunctie.

(Overgenomen van Object)
GetNextTextElement(String, Int32)

Hiermee haalt u het tekstelement op de opgegeven index van de opgegeven tekenreeks op.

GetNextTextElement(String)

Hiermee haalt u het eerste tekstelement in een opgegeven tekenreeks op.

GetTextElementEnumerator(String, Int32)

Retourneert een enumerator die de tekstelementen van de tekenreeks doorloopt, te beginnen bij de opgegeven index.

GetTextElementEnumerator(String)

Retourneert een opsomming die de tekstelementen van de hele tekenreeks doorloopt.

GetType()

Hiermee haalt u de Type huidige instantie op.

(Overgenomen van Object)
MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
ParseCombiningCharacters(String)

Retourneert de indexen van elk basisteken, hoog surrogaat of besturingsteken binnen de opgegeven tekenreeks.

SubstringByTextElements(Int32, Int32)

Haalt een subtekenreeks van tekstelementen op uit het huidige StringInfo object dat begint met een opgegeven tekstelement en doorloopt het opgegeven aantal tekstelementen.

SubstringByTextElements(Int32)

Hiermee haalt u een subtekenreeks van tekstelementen op uit het huidige StringInfo object dat begint met een opgegeven tekstelement en doorgaat met het laatste tekstelement.

ToString()

Retourneert een tekenreeks die het huidige object vertegenwoordigt.

(Overgenomen van Object)

Van toepassing op

Zie ook