Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 문자열이 유효한 식별자(키워드 형식)인지 확인하는 방법

Java 프로그래밍에서 변수명이나 클래스명으로 사용할 수 있는 문자열, 즉 유효한 식별자(identifier)인지 확인해야 하는 경우가 자주 있습니다. 유효한 식별자는 다음 규칙을 따라야 합니다.

  • 첫 번째 문자는 영문 소문자(a~z), 대문자(A~Z) 또는 밑줄(_)이어야 합니다.
  • 두 번째 문자부터는 위의 문자들에 더해 숫자(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

예제에서 사용된 문자열 "Hi_there!3"에는 특수문자 '!'가 포함되어 있기 때문에 유효하지 않은 식별자로 판정됩니다.

코드 설명

Demo라는 이름의 클래스 안에는 Boolean 값을 반환하는 valid_identifier 함수가 정의되어 있습니다. 이 함수는 문자열과 해당 문자열의 길이를 매개변수로 받습니다.

먼저 문자열의 첫 번째 문자가 'a'~'z', 'A'~'Z' 범위에 속하거나 밑줄(_) 문자인지 검사합니다. 조건에 맞지 않으면 즉시 false를 반환합니다.

그다음 for 반복문을 사용해 문자열 전체를 순회하면서 각 문자가 영문자, 숫자('0'~'9'), 또는 밑줄에 해당하는지 확인합니다. 중간에 유효하지 않은 문자가 하나라도 발견되면 false를 반환하고, 모든 검사를 통과하면 true를 반환합니다.

main 함수에서는 검사할 문자열을 정의하고, 그 길이를 변수에 저장한 뒤 두 값을 인자로 전달하여 함수를 호출합니다. 반환값에 따라 "It is valid" 또는 "It is invalid" 메시지가 화면에 출력됩니다.

참고: Java 표준 API를 활용한 더 간단한 방법

직접 문자 범위를 비교하는 대신, Java에서 기본 제공하는 Character.isJavaIdentifierStart()Character.isJavaIdentifierPart() 메서드를 활용하면 코드를 훨씬 간결하게 작성할 수 있습니다.

static boolean isValidIdentifier(String str){
    if (str.isEmpty() || !Character.isJavaIdentifierStart(str.charAt(0)))
        return false;
    for (int i = 1; i < str.length(); i++){
        if (!Character.isJavaIdentifierPart(str.charAt(i)))
           return false;
    }
    return true;
}

또한 한 가지 유의할 점은, if, for, class처럼 Java 언어가 문법적으로 예약해 둔 키워드(reserved word)는 문자 규칙을 만족하더라도 식별자로 사용할 수 없다는 것입니다. 따라서 완전한 검증이 필요하다면 키워드 목록과의 비교 로직을 추가로 구현하는 것이 좋습니다.