ahnnyung ,/Java

[StringBuilder] StringBuilder.reverse() 이용해서 문자열 뒤집기

hi,ho 2021. 11. 29. 15:53
반응형

Javascript문법 공부중 this.message = this.message.split('').reverse().join('') 라는 얄미운 문법을 발견.

'Java엔 저런게 없을까' 라는 생각과 바로 시작 된 구글링.

Java 또한 StringBuilder의 reverse() 메소드를 이용하여 뒤집는게 가능하다. 어떻게 보면 더 간결할지도.

 

영어도 뒤집고
한글도 휘리릭

 

오 하다못해 이모지까지..?

 

 

그렇다면 뜯어봐야지

 

우선 타고타고 들어가보니 AbstractStringBuilder의 reverse() 메소드를 호출해준다.

 

우선AbstractStringBuilder의 valuecount는 현재 StringBuilder에 들어와있는 문자 배열그 길이를 의미한다.

다음이 reverse() 메소드이다.

 우선 n을 count - 1 로 잡아주고 (아마도 value의 index가 count의 -1까지 있기때문이라 생각)

for루프를 시작한다. 단 시작하는 부분이 재미있게도 (n-1) >> 1 부터 시작이다.

이를 통해서 문자열의 길이가 짝수길이이건 홀수길이이건 (홀수길이라면 정 가운데문자를 제외한) 길이의 절반 index부터 시작된다.

그리고 kn - j, 즉, 절반 index이후로 지정하고 루프를 통해 양 문자를 swap해주는 방식이다.

 

 그 다음에있는 if문은 swap할 문자가 isSurrogate인지 확인하는 구문인데, 이는 문자의 인코딩관련한 확인구문이니 자세한건 따로 정리해야 할 것 같다.

 

 

해당 메소드를 탐구하면서 느낀 매력적인 포인트는 두 가지이다.

1. (n-1) >> 1 : 비트연산을 이용하여 홀수길이, 짝수길이 상관없이 깔끔하게 절반으로 나누는 방식.

2. 원래 문자 저장 배열인 value를 그대로 이용한 효율적인 저장공간 활용

 

반응형