import re
comment_pattern = r"(//.*?$|/\*.*?\*/|/\*\*.*?\*/)" # 주석 제거 (//, /* */, /** */) # 사용자 정의 함수 추출 정규식 method_pattern = r""" (?:public|protected|private|static|\s)* # 접근 제어자 및 static 키워드 \s*\w+\s+ # 반환형 (\w+)\s* # 함수 이름 (캡처) \([^)]*\)\s* # 매개변수 괄호 () \{ # 시작 중괄호 { """
def extract_custom_methods(file_path):
# 정규 표현식
comment_pattern = r"(//.*?$|/\*.*?\*/|/\*\*.*?\*/)" # 주석 제거
class_pattern = r"(?:public|protected|private|\s)*\s*class\s+\w+" # 클래스 정의
method_pattern = r""" (?:public|protected|private|static|\s)*\s* # 접근제어자, static 등 (선택)
\w+\s+ # 반환 타입
(\w+)\s* # 함수 이름 캡처
\([^)]*\) # 괄호 안의 매개변수
\s* # 공백
(?:\{|\n\s*\{|\n\s*//.*\n\s*\{) # 같은 줄, 다음 줄, 또는 주석 뒤의 '{'
"""
block_keywords = {"if", "else", "try", "catch", "finally", "while", "for", "switch", "do", "synchronized"} # 제외할 블록 키워드
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
# 주석 제거
content_no_comments = re.sub(comment_pattern, "", content, flags=re.S | re.M)
# 클래스 정의 제거
content_no_classes = re.sub(class_pattern, "", content_no_comments, flags=re.S | re.M)
# 함수 이름 추출
raw_methods = re.findall(method_pattern, content_no_classes)
# 블록 키워드 제외
custom_methods = [method for method in raw_methods if method not in block_keywords]
return custom_methods
# 파일 경로 지정
java_file_path = "YourJavaFile.java"
custom_methods = extract_custom_methods(java_file_path)
# 결과 출력
print("Custom Methods:")
for method in custom_methods:
print(method)