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

【Java】文字列が有効な識別子(キーワード)かどうかを判定する方法

Javaでは、変数名やクラス名などの識別子として文字列が有効かどうかをプログラムで判定したい場面があります。この記事では、文字列がJavaの識別子(キーワードとして使える名前)のルールに合致しているかどうかを確認する方法を、サンプルコードと実行結果とともに解説します。

Javaの識別子のルール

Javaの識別子には、主に以下のルールがあります。

  • 先頭の文字は英字(a〜z、A〜Z)またはアンダースコア(_)であること
  • 2文字目以降は英字、数字(0〜9)、アンダースコアのいずれかであること
  • 記号や空白は使用できないこと

サンプルコード

import java.util.*;
public class Demo{
    static boolean valid_identifier(String my_str, int n){
        if (!((my_str.charAt(0) >= 'a' && my_str.charAt(0) <= 'z')
            || (my_str.charAt(0) >= 'A' && my_str.charAt(0) <= 'Z')
            || my_str.charAt(0) == '_'))
            return false;
        for (int i = 1; i < my_str.length(); i++){
            if (!((my_str.charAt(i) >= 'a' && my_str.charAt(i) <= 'z')
                || (my_str.charAt(i) >= 'A' && my_str.charAt(i) <= 'Z')
                || (my_str.charAt(i) >= '0' && my_str.charAt(i) <= '9')
                || my_str.charAt(i) == '_'))
                return false;
        }
        return true;
    }
    public static void main(String args[]){
        String my_str = "Hi_there!3";
        int n = my_str.length();
        if (valid_identifier(my_str, n))
            System.out.println("It is valid");
        else
            System.out.println("It is invalid");
    }
}

実行結果

It is invalid

コードの解説

Demoというクラスの中に、boolean型の値を返す「valid_identifier」という関数を定義しています。この関数は文字列とその長さを引数として受け取り、以下の手順で文字列の妥当性を検証します。

  1. まず1文字目が「a」〜「z」、「A」〜「Z」、またはアンダースコア(_)のいずれかに該当するかをチェックします。どれにも該当しない場合はfalseを返します。
  2. 次に、2文字目以降を先頭から順に走査し、「a」〜「z」、「A」〜「Z」、「0」〜「9」、アンダースコア以外の文字が含まれていないかを確認します。禁止文字が見つかった時点でfalseを返します。
  3. すべての文字が条件を満たしていればtrueを返します。

mainメソッドでは、テスト用の文字列「Hi_there!3」を定義し、その長さを変数nに代入したうえで、文字列と長さを引数として関数を呼び出しています。判定結果に応じて、対応するメッセージが出力されます。

今回の例では、文字列に記号「!」が含まれているため、識別子としては無効と判断され、「It is invalid」が出力されます。

補足:正規表現を使った簡潔な書き方

同様の判定は、正規表現を使うことでより簡潔に記述できます。

String my_str = "Hi_there!3";
boolean isValid = my_str.matches("[a-zA-Z_][a-zA-Z0-9_]*");
System.out.println(isValid ? "It is valid" : "It is invalid");

また、より厳密に判定したい場合は、標準APIの Character.isJavaIdentifierStart()Character.isJavaIdentifierPart() を利用する方法もあります。さらに注意点として、classpublic などのJavaの予約語(キーワード)は識別子として使用できないため、実運用では予約語リストとの照合も組み合わせると安全です。

  1. 【Python入門】文字列が有効なキーワード(予約語)かどうかを確認する方法

    Pythonには、他の多くのプログラミング言語と同様に、予約語(キーワード)が存在します。これらの単語は言語仕様の中で特別な意味を持っており、制御構文や定義文などで使われます。そのため、変数名や関数名として利用することはできません。 本記事では、ある文字列がPythonの有効なキーワードであるかどうかを判定する方法を解説します。 keywordモジュールをインポートする 文字列がキーワードかどうかを調べるには、Pythonの標準ライブラリである keyword モジュールを使用します。まずは以下のようにインポートしましょう。 import keyword iskeyword()関数で判定する

  2. Javaで文字列を比較する方法|equals()とequalsIgnoreCase()の使い分けを徹底解説

    Javaで文字列の等価性を比較する際は、Stringクラスが提供するequalsメソッドまたはequalsIgnoreCaseメソッドを使用するのが基本です。この記事では、それぞれのメソッドの使い方に加えて、==演算子で文字列を比較してはいけない理由についても詳しく解説します。 equals()メソッドで文字列を比較する 2つの文字列を比較し、大文字と小文字の違いまで厳密に判定したい場合はequals()メソッドを使用します。 次のコード例では、2つのStringインスタンスが大文字小文字を含むすべての文字において一致しているかどうかを判定しています。 public class Compare