【C#】文字列が有効なキーワード(予約語)かどうかを判定する方法
C#において、ある文字列が有効なキーワード(予約語)であるかどうかを確認したい場合は、IsValidIdentifierメソッドを使用します。
IsValidIdentifierメソッドは、入力された値が識別子(identifier)として有効かどうかを判定するものです。もし識別子として無効であれば、その文字列はC#のキーワードであると判断できます。つまり、「for」「class」「int」のような予約語は識別子として使用できないため、このメソッドがfalseを返すことになります。
それでは実際に、CodeDomProviderを作成し、IsValidIdentifierメソッドで判定を行う手順を見ていきましょう。
CodeDomProvider provider = CodeDomProvider.CreateProvider("C#");
以下に完全なサンプルコードを示します。
サンプルコード
using System;
using System.IO;
using System.CodeDom.Compiler;
namespace Program {
class Demo {
static void Main(string[] args) {
string str1 = "amit";
string str2 = "for";
CodeDomProvider provider = CodeDomProvider.CreateProvider("C#");
// str1 の判定
if (provider.IsValidIdentifier(str1)) {
Console.WriteLine("{0} は識別子です", str1);
} else {
Console.WriteLine("{0} はC#の有効なキーワードです", str1);
}
// str2 の判定
if (provider.IsValidIdentifier(str2)) {
Console.WriteLine("{0} は識別子です", str2);
} else {
Console.Write("{0} はC#の有効なキーワードです", str2);
}
}
}
}
実行結果
amit は識別子です for はC#の有効なキーワードです
ポイント解説
このコードでは、System.CodeDom.Compiler名前空間を利用しています。CreateProvider("C#")によってC#用のコードプロバイダーを生成し、そのIsValidIdentifierメソッドに判定したい文字列を渡します。
- 「amit」は予約語ではないため、変数名などの識別子として有効であり、trueが返されます。
- 「for」はループ構文で使われる予約語のため、識別子としては無効であり、falseが返されます。これにより「キーワードである」と判断できます。
なお、どうしてもキーワードと同じ名前の識別子を使いたい場合は、「@for」のように先頭に@記号を付けることでエスケープ識別子として利用可能です。ただし、可読性や保守性の観点から、通常は避けるのが望ましいでしょう。
-
Pythonで文字列がASCIIのみで構成されているかどうかを確認する方法
Pythonで文字列がすべてASCII文字だけで構成されているかどうかを判定したい場面は少なくありません。ここでは、代表的な2つの方法をわかりやすく解説します。 方法1:all()とord()を使って1文字ずつチェックする 最もシンプルな方法は、文字列内の各文字を順番に調べ、その文字コード(Unicodeコードポイント)が128未満であるかを確認することです。ASCIIは0〜127のコードポイントで定義されているため、すべての文字がこの範囲内であれば、その文字列はASCIIのみで構成されていると判断できます。 def is_ascii(s): return all(ord(c) <
-
Pythonで文字列が英数字のみかどうかを判定する方法【isalnum()と正規表現】
Pythonでは、文字列が英数字(アルファベットと数字)のみで構成されているかどうかを簡単に判定できます。主な方法は2つあります。文字列クラスに組み込まれている isalnum() メソッドを使う方法と、正規表現を使う方法です。 isalnum()メソッドを使う方法 Pythonの文字列クラスには isalnum() というメソッドが用意されています。このメソッドを文字列に対して呼び出すと、文字列が英数字のみで構成されている場合に True を、記号などが含まれる場合には False を返します。 >>> 123abc.isalnum() True >>>