2013-12-19 8 views
1
StringBuilder builder = new StringBuilder(); 
    builder.setLength(10); 
    builder.append("d");   
    System.out.println(builder.length() + "\t" + builder.toString() + "\t" + builder.indexOf("d")); 

출력 :같이 IndexOf 아무것도 반환하지 않습니다

11 

문제 :

Why indexOf() doesn't return anything. 

내 이해 :

As per my understanding, it should return 10, since StringBuilder is counting the "d" as part of its length in length(). 
But in case if "d" is not part of string hold by StringBuilder then, it should return -1 and length should be 10. 

답변

4

당신은 문서를 보면 StringBuilder#setLength(int newLength)

newLength 인수가 현재 길이보다 크거나 같으면 length가 newLength 인수가되도록 충분한 널 문자 ('\ u0000')가 추가됩니다. 당신이 길이를 설정 한 후 "D"를 추가 할 때, 그것이 (10) null 문자 다음에 위치하는 이유입니다

.


Q. 왜 같이 IndexOf()는 아무 것도 반환하지 않습니다.

그것은 값을 반환 않고 인덱싱 때문에 즉, 10이다 0 계. 이것은 코드의 결과입니다.

11   d 10   // the 10 represents the index of d 
^-length  ^-10 null chars followed by d 

당신은 출력이 때문에 콘솔이 null 문자를 지원하지 않는 될 수 있습니다 못하고있는 이유. 그래서 null 문자 \u0000이 발생하면 콘솔의 값 인쇄가 중지됩니다. 유니 코드 문자 인쇄를 지원하는 eclipse를 사용해보십시오.

샘플 스냅 샷 :

Output Snapshot

+1

+1 .. :) 그것에 –

+0

을 날 이길하지만 인쇄 문에, 나는'같이 IndexOf를()', 그리고 내가 반환 값을 받고 있지 않다. 나는 코드를 다시 실행하고 11 개만 출력한다. – guptakvgaurav

+0

@GauravGupta - 내 대답에 편집을 확인하십시오! :) – SudoRahul

관련 문제