on
[StringBuilder] StringBuilder.reverse() 이용해서 문자열 뒤집기
[StringBuilder] StringBuilder.reverse() 이용해서 문자열 뒤집기
728x90
Javascript문법 공부중 this.message = this.message.split('').reverse().join('') 라는 얄미운 문법을 발견.
'Java엔 저런게 없을까' 라는 생각과 바로 시작 된 구글링.
Java 또한 StringBuilder의 reverse() 메소드를 이용하여 뒤집는게 가능하다. 어떻게 보면 더 간결할지도.
영어도 뒤집고 한글도 휘리릭
오 하다못해 이모지까지..?
그렇다면 뜯어봐야지
우선 타고타고 들어가보니 AbstractStringBuilder의 reverse() 메소드를 호출해준다.
우선AbstractStringBuilder의 value와 count는 현재 StringBuilder에 들어와있는 문자 배열과 그 길이를 의미한다.
다음이 reverse() 메소드이다.
우선 n을 count - 1 로 잡아주고 (아마도 value의 index가 count의 -1까지 있기때문이라 생각)
for루프를 시작한다. 단 시작하는 부분이 재미있게도 (n-1) >> 1 부터 시작이다.
이를 통해서 문자열의 길이가 짝수길이이건 홀수길이이건 (홀수길이라면 정 가운데문자를 제외한) 길이의 절반 index부터 시작된다.
그리고 k를 n - j, 즉, 절반 index이후로 지정하고 루프를 통해 양 문자를 swap해주는 방식이다.
그 다음에있는 if문은 swap할 문자가 isSurrogate인지 확인하는 구문인데, 이는 문자의 인코딩관련한 확인구문이니 자세한건 따로 정리해야 할 것 같다.
해당 메소드를 탐구하면서 느낀 매력적인 포인트는 두 가지이다.
1. (n-1) >> 1 : 비트연산을 이용하여 홀수길이, 짝수길이 상관없이 깔끔하게 절반으로 나누는 방식.
2. 원래 문자 저장 배열인 value를 그대로 이용한 효율적인 저장공간 활용
from http://ahndding.tistory.com/31 by ccl(A) rewrite - 2021-11-29 16:01:21