7

次の文字列があります。

友又

対応する UTF-16 表現 (リトルエンディアン) は次のとおりです。

CB 53 40 D8 87 DC C8 53
\___/ \_________/ \___/
  友              又

"友又".Length文字列は CLR によって 4 つの 2 バイト文字として格納されるため、4 を返します。

紐の長さはどうやって測るの?に分割するにはどうすればよい{ "友", "", "又" }ですか?

4

1 に答える 1

12

文書化されているように:

このLengthプロパティは、CharUnicode 文字の数ではなく、このインスタンス内のオブジェクトの数を返します。その理由は、Unicode 文字が複数の で表される可能性があるためですChar。このクラスを使用してSystem.Globalization.StringInfo、各 Char ではなく各 Unicode 文字を操作します。


長さの取得:

new System.Globalization.StringInfo("友又").LengthInTextElements

各 Unicode 文字の取得については、こちらに記載されていますが、拡張メソッドを作成する方がはるかに便利です。

public static IEnumerable<string> TextElements(this string s) {
    var en = System.Globalization.StringInfo.GetTextElementEnumerator(s);

    while (en.MoveNext())
    {
        yield return en.GetTextElement();
    }
}

foreachまたは LINQ ステートメントで使用します。

foreach (string segment in "友又".TextElements())
{
    Console.WriteLine(segment);
}

長さにも使用できます。

Console.WriteLine("友又".TextElements().Count());
于 2013-01-02T00:18:11.437 に答える