2013-07-03 1 views
12

널 문자 '\u0000'을 사용할 때 stringbuilder가 새로운 요소 추가를 중지합니다.null 문자를 사용한 후에 stringbuilder가 요소 추가를 중단하는 이유는 무엇입니까?

예를 들어

:

StringBuilder _stringBuilder = new StringBuilder(); 
_stringBuilder.append('\u0000'); 
_stringBuilder.append('a'); 
System.out.println("."+_stringBuilder+"."); 

반환

. 

내가 널 값이 인쇄 (또는 널 (null) 문자열 값이 있다면 같이 인쇄)되지 않아야 함을 이해하지만,이 경우에, 왜 stringbuilder가 더 많은 요소를 추가하지 못하고 있습니까?

참고 : 우분투에서 jdk 1.6.0_38을 사용하고 있습니다.

+0

'\ 0'- C 및 C++ 문자열에서 문자열의 끝으로 사용되는 null 종결 자 – user1516873

+1

'StringBuilder'가 새 요소를 추가하는 것을 중단했는지 의심 스럽습니다. 이것은 결과로 나오는'String'을 디스플레이 할 때 더 문제가 될 수 있습니다. 몇개의 요소를 추가 한 후'StringBuilder'의'length()'는 무엇입니까? –

+1

나는 win 7에서 jdk 1.6.0_25에서 Eclipse에서 정확한 코드를 실행했다. a.' ... 쉘 특유의 것이 될 수 있습니다. – FGreg

답변

7

null 문자는 문자열의 끝을 나타내는 예약 된 문자이므로 어떤 문자를 인쇄 할 때 \u0000 다음에 아무 것도 인쇄되지 않으면 아무 것도 인쇄되지 않습니다.


왜 null 문자를 사용하면 stringbuilder가 요소를 추가하지 않습니까? 정말 자바가 아니에요. \u0000을 문자열의 끝으로 취급하는 것은 귀하의 터미널입니다.

누군가가 말하듯 Windows 출력은 .a. 일 수 있습니다 (테스트하지 않았습니다). 이는 Windows 터미널이 Unix 기반 시스템 터미널과 다르게 작동하기 때문입니다. 나는 당신이 OSX 시스템에서이 코드를 실행하면 당신은 당신이 리눅스에 얻는 것과 같은 출력을 얻을 것이라고 확신

귀하의 stringBuilder 여전히 요소를 추가
+2

'.'와'(null 문자를위한) 박스,'a'와'.'를 출력한다. 윈도우 머신. –

+0

@ BheshGurung UNIX 시스템은 Windows와 다르게 작동하기 때문에 이론적으로 OSX에서 똑같은 작업을 시도하면 '인쇄해야합니다.' – BackSlash

+2

null 문자는 Java에서 문자열을 종료하는 데 사용되지 않습니다. – Kayaman

7

, 참조 :

StringBuilder stringBuilder = new StringBuilder(); 
stringBuilder.append('\u0000'); 
System.out.println(stringBuilder.length()); // prints 1 
stringBuilder.append('a'); 
System.out.println(stringBuilder.length()); // prints 2 

내 생각을 \u0000 종료 문자 다음에 콘솔이 인쇄를 멈추는 것입니다. 다른 콘솔이이를 다르게 처리 할 수 ​​있습니다.

1

테스트를 시도했지만 Windows 7 시스템에서 이클립스가 실패하지 않습니다. 그러나이 테스트 프로그램을 실행하면 비 추가 및 비 인쇄가 구분됩니다. 실패한 환경에서 실행하는 것이 좋습니다.

public class Test { 
    public static void main(String[] args){ 
    StringBuilder _stringBuilder = new StringBuilder(); 
    _stringBuilder.append('\u0000'); 
    _stringBuilder.append('a'); 
    System.out.println("."+_stringBuilder+"."); 
    System.out.println(_stringBuilder.length()); 
    System.out.println(_stringBuilder.charAt(1)); 
    } 
} 

문제가 추가되지 않으면 길이가 2보다 작아지고 색인 1에 문자를 인쇄하려는 시도가 실패합니다. 문제가 인쇄되지 않으면 길이는 2이고 인덱스 1의 문자는 'a'가됩니다.

비 인쇄는 비 첨부보다 가능성이 훨씬 높다고 생각합니다.

관련 문제