C#のUri.IsHexEncoding()メソッドとは?使い方とサンプルコードを解説
C#のUri.IsHexEncoding()メソッドは、文字列内の指定した位置にある文字が、URIで使用される「%XX」形式の16進数エンコード(パーセントエンコーディング)になっているかどうかを判定するための静的メソッドです。
構文
Uri.IsHexEncoding()メソッドの構文は以下のとおりです。
public static bool IsHexEncoding (string pattern, int index);
パラメータ
- pattern:チェック対象となる文字列
- index:16進数エンコードかどうかを確認する、pattern内の位置(インデックス)
戻り値はbool型で、指定位置が有効な16進数エンコードであればtrue、そうでなければfalseを返します。
例1:有効な16進数エンコードを判定する
まず、Uri.IsHexEncoding()メソッドを使用して、文字列「%50」が16進数エンコードとして有効かどうかを確認してみましょう。
using System;
public class Demo {
public static void Main(){
string pattern = "%50";
bool res = Uri.IsHexEncoding(pattern, 0);
if (res)
Console.WriteLine("Valid: Hexadecimal Encoded");
else
Console.WriteLine("Invalid: Hexadecimal Encoded");
}
}出力
Valid: Hexadecimal Encoded
この例では、インデックス0(先頭)に「%」があり、その後に続く2文字「50」が有効な16進数であるため、trueが返されています。
例2:無効なケースを判定する
次に、チェック位置をずらした場合の動作を見てみましょう。
using System;
public class Demo {
public static void Main(){
string pattern = "%60";
bool res = Uri.IsHexEncoding(pattern, 1);
if (res)
Console.WriteLine("Valid: Hexadecimal Encoded");
else
Console.WriteLine("Invalid: Hexadecimal Encoded");
}
}出力
Invalid: Hexadecimal Encoded
この例では、インデックス1に指定されたのは「6」という数字であり、「%」から始まる16進数エンコードの形式ではないため、falseが返されます。このように、Uri.IsHexEncoding()メソッドは指定したインデックスの位置から「%XX」という形式が成立しているかどうかを厳密にチェックします。
まとめ
Uri.IsHexEncoding()メソッドを使うことで、URLやURIに含まれる文字列が正しくパーセントエンコーディングされているかどうかを簡単に検証できます。ユーザー入力のURLを処理する際や、エンコード済みの文字列をデコードする前のバリデーションなどに活用すると便利です。
-
C#のTakeWhileメソッドの使い方をわかりやすく解説
C#のLINQに用意されているTakeWhile()メソッドを使うと、Predicate(述語)で指定した条件が成立している間、シーケンスの先頭から要素を取得することができます。 このメソッドは、条件を満たす限り先頭から順に要素を取り出し、最初に条件を満たさなくなった要素に到達した時点で処理を停止するという特徴があります。そのため、配列の途中に条件外の要素があると、それ以降の要素はたとえ条件を満たしていても取得されない点に注意が必要です。 TakeWhile()メソッドの基本的な使い方 まず、整数型の配列を宣言して初期化します。 int[] arr = { 25, 40, 65, 70 };
-
C#のGroupBy()メソッドとは?要素をグループ化する使い方を解説
GroupBy()メソッドとはC#のGroupBy()は、System.Linq名前空間に用意されている拡張メソッドの一つです。指定したキー値に基づいてコレクション内の要素をグループ化し、その結果をIEnumerable<IGrouping<TKey, TElement>>として返します。各グループにはKeyプロパティが割り当てられ、同じキーを持つ要素がひとつのまとまりとして扱われます。サンプルコードまず、次のような整数型の配列を用意します。int[] arr = { 2, 30, 45, 60, 70 };この配列に対してGroupBy()を使い、「50以下の要素」と