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를 그대로 이용한 효율적인 저장공간 활용
'ahnnyung , > Java' 카테고리의 다른 글
[Java] Math.ceil(), Math.round(), Math.floor() 대체 (0) | 2024.09.11 |
---|---|
[Java] 람다식(Lambda Expression)의 개념 및 사용방법 (0) | 2021.07.29 |
[Java] Arrays.sort() & Collections.sort() 비교 (0) | 2021.03.19 |
[Java] System.nanoTime()으로 자바 코드 실행에 걸린 시간을 측정 (0) | 2021.03.19 |
[Java] Java 8 Stream이란? (6) | 2021.01.19 |