String.trim () 소스 코드를 구문 분석

트림 ()이 방법은 일반적으로 문자열의 양쪽에있는 공간을 제거하기 위해 사용되지만, 내부는 그것을 달성하는 방법은?

소스를 첨부 :

공공 문자열 트림 () {
         INT 렌 = value.length;
        INT 세인트 = 0 ;
        숯불 [] = 브로 값;    / * 피 getfield 동작 코드 * / 

        동안 ((세인트 <LEN) && (브로 [일] <= '' )) { 
            세인트 ++ ; 
        } 
        동안 ((세인트 <LEN) && (브로 [렌 - 1] <= '' )) {  - ; 
        } 
        반환 ((일> 0) || (LEN <value.length))? 문자열 (ST, LEN) ; 
    }

소스에서 볼 수 있듯이 공백이 원래의 문자열로 반환하지 않습니다가있는 경우,이 방법은 양쪽 끝을 제외하고 문자열 실제로 ASCII 공간 부분 차단 리턴 이하이다.

또한 여기에이 방법은 또한 소스 동반) (당신에게 문자열을 알려줄 수 :

공공 문자열 문자열 ( INT beginIndex의, INT 에서 endIndex) {
         경우 (beginIndex의 <0 ) {
             던져  새로운 StringIndexOutOfBoundsException를 (beginIndex는) 
        } 
        경우 (endIndex에> value.length) {
             던져  새로운 StringIndexOutOfBoundsException를 (하고 endIndex); 
        } 
        INT subLen에서 endIndex = - beginIndex의;
        경우 (subLen <0 ) {
             던져  새로운 StringIndexOutOfBoundsException를 (subLen를); 
        } 
        반환((beginIndex의 == 0) && (endIndex에 == value.length))? 
                : 새로운 문자열 (값, beginIndex의, subLen); 
    }

소스 코드) (서브 스트링 알 수있는 바와 같이, 입력 인덱스 시작 인덱스 시작 문자열과 일치하는 경우, 원래의 문자열을 반환 한 경우의 지수 부부터 예외가 발생하지 않을 경우, 다음하지 문자열 차단은이 과정이 새로운 새로운 문자열 객체이므로주의! ! 그런 다음 반환합니다.

그래서,이 예를 들어 구덩이입니다 :

        문자열 STR = "AB" ; 
        문자열 STR1 = ( "A"+ "B" ) .trim (); 
        스트링 (STR2) = ( "A"+ "B" ) .trim (); 
        에서 System.out.println (STR == STR1); 
        에서 System.out.println (STR == STR2);

STR1 상기 공간의 양측 때문에 새로운 트림 부 String 객체 () 메소드의 호출은, 문자열 ()에있어서의 내부를 촬영하므로한다 STR == STR1가 거짓 상수 풀로 포인터 값 상기 힙, 다른 주소에서 개체에 대한 포인터, 그리고 STR2 측면과 공백이없는 모두가, 그래서 트림 때문에 ()

방법은 원래의 목적은, STR == str2가 두 지점이 정수 풀의 값이기 때문에, 수영장과 상수의 값이 정수 풀의 고유 한 캐릭터 라인 및 STR2 점 AB 값입니다, 사실 반환 주소 같은.

추천

출처www.cnblogs.com/wujianwu/p/11239574.html