본문 바로가기

카테고리 없음

ㅇㅇㅇ

728x90

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)