StringInfo.ParseCombiningCharacters(String) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает индексы каждого базового символа, высокого суррогата или элемента управления в указанной строке.
public:
static cli::array <int> ^ ParseCombiningCharacters(System::String ^ str);
public static int[] ParseCombiningCharacters(string str);
static member ParseCombiningCharacters : string -> int[]
Public Shared Function ParseCombiningCharacters (str As String) As Integer()
Параметры
- str
- String
Строка для поиска.
Возвращаемое значение
Массив целых чисел, содержащий отсчитываемые от нуля индексы каждого базового символа, высокого суррогата или элемента управления в указанной строке.
Исключения
str равно null.
Примеры
В следующем примере показано, как вызвать ParseCombiningCharacters метод. Этот пример кода является частью более крупного примера, предоставленного для StringInfo класса.
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
Комментарии
Стандарт Юникода определяет суррогатную пару как закодированное представление символа для одного абстрактного символа, состоящего из последовательности двух единиц кода, где первая единица пары является высокой суррогатной, а второй — низкой суррогатной. Высокий суррогат — это точка кода Юникода в диапазоне U+D800 по U+DBFF и низкая суррогатная точка кода Юникода в диапазоне U+DC00 до U+DFFF.
Символ элемента управления — это символ, для которого значение Юникода равно U+007F или в диапазоне U+0000 до U+0001F или U+0080 до U+009F.
.NET определяет текстовый элемент как единицу текста, отображаемого как один символ, то есть графем. Текстовый элемент может быть базовым символом, суррогатной парой или объединением последовательности символов. Стандарт Юникод определяет комбинацию последовательности символов в виде сочетания базового символа и одного или нескольких объединенных символов. Суррогатная пара может представлять базовый символ или объединенный символ.
Если объединение последовательности символов недопустимо, возвращается каждый символ в этой последовательности.
Каждый индекс в результирующем массиве является началом текстового элемента, то есть индекс базового символа или высокого суррогата.
Длина каждого элемента легко вычисляется как разница между последовательными индексами. Длина массива всегда будет меньше или равна длине строки. Например, учитывая строку "\u4f00\u302a\ud800\udc00\u4f01", этот метод возвращает индексы 0, 2 и 4.
Эквивалентные члены
Начиная с версии 2.0 платформы .NET Framework метод и LengthInTextElements свойство позволяют легко использовать реализацию функций, SubstringByTextElements предлагаемых методомParseCombiningCharacters.