StringInfo.GetTextElementEnumerator メソッド

定義

文字列のテキスト要素を反復処理する列挙子を返します。

オーバーロード

名前 説明
GetTextElementEnumerator(String)

文字列全体のテキスト要素を反復処理する列挙子を返します。

GetTextElementEnumerator(String, Int32)

指定したインデックスから始まる文字列のテキスト要素を反復処理する列挙子を返します。

GetTextElementEnumerator(String)

ソース:
StringInfo.cs
ソース:
StringInfo.cs
ソース:
StringInfo.cs
ソース:
StringInfo.cs
ソース:
StringInfo.cs

文字列全体のテキスト要素を反復処理する列挙子を返します。

public:
 static System::Globalization::TextElementEnumerator ^ GetTextElementEnumerator(System::String ^ str);
public static System.Globalization.TextElementEnumerator GetTextElementEnumerator(string str);
static member GetTextElementEnumerator : string -> System.Globalization.TextElementEnumerator
Public Shared Function GetTextElementEnumerator (str As String) As TextElementEnumerator

パラメーター

str
String

反復処理する文字列。

返品

文字列全体の TextElementEnumerator

例外

strnullです。

次の例では、GetTextElementEnumerator メソッドの呼び出しを示します。 この例は、 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

注釈

.NET では、テキスト要素は、単一の文字 (つまり grapheme) として表示されるテキストの単位として定義されます。 テキスト要素には、基本文字、サロゲート ペア、または結合文字シーケンスを指定できます。 Unicode 標準では、2 つのコード単位のシーケンスで構成される 1 つの抽象文字のコード化された文字表現としてサロゲート ペアが定義されています。この場合、ペアの最初の単位は上位サロゲート、2 番目の単位は低サロゲートです。 Unicode 標準では、基本文字と 1 つ以上の結合文字の組み合わせとして結合文字シーケンスが定義されています。 サロゲート ペアは、基本文字または結合文字を表すことができます。

テキスト要素列挙子は、文字列内のデータを読み取るためにのみ使用されます。基になる文字列を変更することはできません。 列挙子は、文字列への排他的アクセス権を持っていません。

列挙子は、文字列内の最初のテキスト要素の前または文字列内の最後のテキスト要素の後に配置されている場合、無効な状態になります。 列挙子が無効な状態の場合、 Current を呼び出すと例外がスローされます。

最初は、列挙子は文字列内の最初のテキスト要素の前に配置されます。 Reset また、列挙子をこの位置に戻します。 したがって、列挙子が作成された後、またはResetが呼び出された後、MoveNextCurrentの値を読み取る前に、列挙子を文字列の最初のテキスト要素に進めるために呼び出す必要があります。

Current は、 MoveNext または Reset が呼び出されるまで、同じオブジェクトを返します。

文字列の末尾が渡されると、列挙子は再び無効な状態になり、 MoveNext を呼び出すと falseが返されます。 Currentを呼び出すと、MoveNextの最後の呼び出しがfalse返された場合、例外がスローされます。

こちらもご覧ください

適用対象

GetTextElementEnumerator(String, Int32)

ソース:
StringInfo.cs
ソース:
StringInfo.cs
ソース:
StringInfo.cs
ソース:
StringInfo.cs
ソース:
StringInfo.cs

指定したインデックスから始まる文字列のテキスト要素を反復処理する列挙子を返します。

public:
 static System::Globalization::TextElementEnumerator ^ GetTextElementEnumerator(System::String ^ str, int index);
public static System.Globalization.TextElementEnumerator GetTextElementEnumerator(string str, int index);
static member GetTextElementEnumerator : string * int -> System.Globalization.TextElementEnumerator
Public Shared Function GetTextElementEnumerator (str As String, index As Integer) As TextElementEnumerator

パラメーター

str
String

反復処理する文字列。

index
Int32

反復処理を開始する位置を示す 0 から始まるインデックス。

返品

indexから始まる文字列のTextElementEnumerator

例外

strnullです。

index が、 strの有効なインデックスの範囲外です。

注釈

.NET では、テキスト要素は、単一の文字 (つまり grapheme) として表示されるテキストの単位として定義されます。 テキスト要素には、基本文字、サロゲート ペア、または結合文字シーケンスを指定できます。 Unicode 標準では、2 つのコード単位のシーケンスで構成される 1 つの抽象文字のコード化された文字表現としてサロゲート ペアが定義されています。この場合、ペアの最初の単位は上位サロゲート、2 番目の単位は低サロゲートです。 Unicode 標準では、基本文字と 1 つ以上の結合文字の組み合わせとして結合文字シーケンスが定義されています。 サロゲート ペアは、基本文字または結合文字を表すことができます。

テキスト要素列挙子は、文字列内のデータを読み取るためにのみ使用されます。基になる文字列を変更することはできません。 列挙子は、文字列への排他的アクセス権を持っていません。

列挙子は、文字列内の最初のテキスト要素の前または文字列内の最後のテキスト要素の後に配置されている場合、無効な状態になります。 列挙子が無効な状態の場合、 Current を呼び出すと例外がスローされます。

最初は、列挙子は文字列内の最初のテキスト要素の前に配置されます。 Reset また、列挙子をこの位置に戻します。 したがって、列挙子が作成された後、またはResetが呼び出された後、MoveNextCurrentの値を読み取る前に、列挙子を文字列の最初のテキスト要素に進めるために呼び出す必要があります。

Current は、 MoveNext または Reset が呼び出されるまで、同じオブジェクトを返します。

文字列の末尾が渡されると、列挙子は再び無効な状態になり、 MoveNext を呼び出すと falseが返されます。 Currentを呼び出すと、MoveNextの最後の呼び出しがfalse返された場合、例外がスローされます。

こちらもご覧ください

適用対象