C#
 Computer >> コンピューター >  >> プログラミング >> C#

【C#】Char.IsSurrogateメソッドで指定した文字がサロゲートコードかどうかを判定する方法

C#で文字列内の指定された位置にある文字がサロゲートコードポイント(Unicode範囲 U+D800 ~ U+DFFF)を持つかどうかを確認するには、Char.IsSurrogateメソッドを使用します。このメソッドは、指定位置の文字が上位サロゲートまたは下位サロゲートである場合に true を返します。

サロゲートは、絵文字などの補助文字(BMP外の文字)をUTF-16で表現するために使われる特殊なコード単位で、通常はペアで構成されます。文字列処理を行う際にこの判定は非常に重要です。

例1:サロゲート値を含む場合

以下の例では、文字配列の末尾(インデックス4)にサロゲート値 \uD800 を含む文字列を作成し、Char.IsSurrogate で判定しています。

using System;
public class Demo {
    public static void Main() {
        string str = new String(new char[] { 'k', 'm', 'g', 't', '\uD800' });
        bool res = Char.IsSurrogate(str, 4);
        if (res)
            Console.WriteLine("Contains Surrogate value!");
        else
            Console.WriteLine("Does not contain Surrogate value!");
    }
}

出力

上記のコードを実行すると、次の出力が得られます。

Contains Surrogate value!

インデックス4の文字がサロゲートコードポイント(U+D800)であるため、true が返されています。

例2:サロゲート値を含まない場合

続いて、すべてが通常の英字で構成された文字列の場合を見てみましょう。

using System;
public class Demo {
    public static void Main() {
        string str = new String(new char[] { 'k', 'm', 'g', 't', 'w' });
        bool res = Char.IsSurrogate(str, 4);
        if (res)
            Console.WriteLine("Contains Surrogate value!");
        else
            Console.WriteLine("Does not contain Surrogate value!");
    }
}

出力

実行結果は以下のとおりです。

Does not contain Surrogate value!

この場合、インデックス4の文字「w」は通常のASCII文字であり、サロゲート範囲には含まれないため false が返されます。

まとめ

  • Char.IsSurrogate(string, int):指定した文字列の指定位置の文字がサロゲートかどうかを判定する。
  • Char.IsHighSurrogate(char):上位サロゲート(U+D800 ~ U+DBFF)かどうかを判定する。
  • Char.IsLowSurrogate(char):下位サロゲート(U+DC00 ~ U+DFFF)かどうかを判定する。

マルチバイト文字や絵文字を扱うアプリケーションでは、文字列を正しく分割・解析するために、これらのメソッドを活用することをおすすめします。

  1. C#で入力された数値がアームストロング数かどうかを判定するプログラム

    アームストロング数(Armstrong Number)とは、3桁の数値の場合、各桁の数字を3乗した値の合計が、元の数値そのものと等しくなる数のことです。例として挙げられるのが「153」です。153は以下のように表すことができます。1³ + 3³ + 5³C#でアームストロング数かどうかを判定するには、まず対象となる数値の各桁を取り出し、それぞれの3乗を足し合わせていきます。ここでは、判定したい数値を変数「val」に格納しています。ループ処理では、10で割りながら余りを求めることで、一の位から順に各桁の数字を取り出します。for (int i = val; i > 0; i = i / 1

  2. Pythonで文字列の平均文字が存在するかどうかを確認する方法

    英数字を含む文字列 s が与えられたとき、その文字列の「平均文字」が存在するかどうかを判定し、存在する場合はその文字を返すプログラムを作成します。ここでいう平均文字とは、文字列内の各文字のASCII値の平均を計算し、その小数点以下を切り捨てた値に対応する文字のことです。 問題の例 例えば、入力が s = pqrst の場合、出力は r になります。これは、各文字のASCII値の平均が以下のように計算されるためです。 (112 + 113 + 114 + 115 + 116) / 5 = 570 / 5 = 114 ASCII値 114 に対応する文字は r なので、答えは r となります。 解