🧐 🤔 그거 어떻게 쓰더라 🙄 😙

C-style 주석 제거 예제 [Java]

2023. 11. 3. Evergood Kim이가 씀

Java에서 String에서 C 식 주석 부분 제거하여 String으로 반환하는 코드

C-style이라곤 하는데 사실 정확히는 JSON 파일에 주석 달아놓고 서버에서 그걸 읽을 때는 제거하려는 목적으로 만들었다.

  • //부터 줄끝까지 제거
  • /*와 */ 사이를 제거
  • 문자열(두 큰따옴표 사이) 내에서 //, /* 효과없음
  • 문자열 내에서 \ 다음의 문자 효과없음
/**
 * C-style 주석 제거
 */
public String deleteComment(String string) {
    StringBuilder outputBuilder = new StringBuilder();
    char[] charArr = string.toCharArray();
    int status = 0;
    for (char c : charArr) {
        switch (status) {
        case 0:// 주석도, 문자열도 아님
            switch (c) {
            case '/':
                status = 1;
                break;
            case '"':
                outputBuilder.append('"');
                status = 5;
                break;
            default:
                outputBuilder.append(c);
            }
            break;
        case 1:// /를 1개 찾음
            switch (c) {
            case '/':
                status = 2;
                break;
            case '*':
                status = 3;
                break;
            default:
                outputBuilder.append('/');
                status = 0;
            }
            break;
        case 2:// 한줄주석
            switch (c) {
            case '\n':
                outputBuilder.append('\n');
                status = 0;
                break;
            }
            break;
        case 3:// 여러줄주석
            switch (c) {
            case '*':
                status = 4;
                break;
            }
            break;
        case 4:// 여러줄주석 끝나기 직전
            switch (c) {
            case '/':
                status = 0;
                break;
            case '*':
                break;
            default:
                status = 3;
            }
            break;
        case 5:// 문자열 내부
            outputBuilder.append(c);
            switch (c) {
            case '"':
                status = 0;
                break;
            case '\\':
                status = 6;
                break;
            }
            break;
        case 6:// 문자열 안 끝나
            outputBuilder.append(c);
            status = 5;
            break;
        }
    }

    switch (status) {
    case 1:
        outputBuilder.append('/');
        break;
    }

    return outputBuilder.toString();
}

인터넷에 치면 나올 줄 알았는데 일단 대충 못 찾아서 대충 만들어봄.

728x90