StringInfo Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
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:
Roep de StringInfo(String) constructor aan en geef deze door aan de tekenreeks die het StringInfo object als argument aangeeft.
Roep de standaardconstructor StringInfo() aan en wijs de tekenreeks toe die het StringInfo object aan de String eigenschap moet vertegenwoordigen.
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) |