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