2014-03-26 4 views
3

OK, 두 개의 샘플 발췌 : 먼저자바 로거 - 토큰 아포스트로피 문제

:

boolean var = false; 
log.log(Level.WARNING, "Cant {0}", new Object[] { var }); 

출력 :

Can't false 

둘째 :

boolean var = false; 
log.log(Level.WARNING, "Can't {0}", new Object[] { var }); 

출력 :

수 없습니다 {0}

아포스트로피의 포함은 (')는 토큰을 확장하지 로거가 발생하는 이유

?

+0

'log' 어떤 타입 :

log.log(Level.WARNING, "Can''t {0}", new Object[] {var}); 

당신은 단순히 더 판독 가능

log.log(Level.WARNING, "Can’t {0}", new Object[] {var}); 

을 시도하거나 시작하기 위해 그것을 밖으로 철자 수 있습니다 게다가

? –

+1

또한 첫 번째 출력은'Cant false'처럼 보입니다. –

+0

@SotiriosDelimanolis 로그는 java.util.logging.Logger입니다. 출력 내용이 맞지만 급하게 게시되었습니다. – Wojtek

답변

4

사용중인 모든 로깅 메커니즘이 내부적으로 MessageFormat 클래스를 사용하고있는 것 같습니다. 그렇다면 작은 따옴표 문자이기 때문에 아포스트로피 문자를 이스케이프 처리해야합니다. 작은 따옴표 문자는 해석 할 의도가없는 텍스트를 인용하는 데 사용됩니다.

MessageFormat javadocs

: 문자열 내에서

은 작은 따옴표 한 쌍의 작은 따옴표를 제외한 임의의 문자를 인용하는 데 사용할 수 있습니다. 예를 들어 패턴 문자열 " '{0}'"은 문자열 "{0}"을 나타내며 FormatElement는 표시하지 않습니다. 작은 따옴표 자체는 문자열 전체에 두 배로 큰 따옴표 '' '으로 나타내야합니다.

(강조 광산)

이 코드

log.log(Level.WARNING, "Can''t {0}", new Object[] { var }); 

보십시오

Can't false 
+0

예,이게 전부입니다! 나는 그것이 escaping과 관련이 있다고 생각했지만 double single quote 대신 \ '를 시도했다. – Wojtek