Study/java

[Java] String - offsetByCodePoints

offsetByCodePoints 메소드는 지정된 인덱스에서 codePointOffset 코드포인트로 오프셋 된 문자열 내의 인덱스를 리턴합니다.

 

offsetByCodePoints(int index, int codePointOffset)

공식문서상으로는 Returns the index within this String that is offset from the given index by codePointOffset code point.라고 표현합니다.

codePointAt이 아스키코드값을 리턴한다면, offsetByCodePoints는 인덱스 값을 리턴한다는 차이가 있습니다.

 

String s = "saoigd";
System.out.println(s.offsetByCodePoints(1, 3));

offsetByCodePointAt 사용결과

예제의 문자열은 abcde로 하니까 헷갈려서 임의의 문자들로만 구성했습니다.

코드 실행 결과는 4가 나옵니다.

 

위에서 언급한 리턴값은 지정된 인덱스에서 codePointOffset 코드포인트로 오프셋 된 문자열 내의 인덱스값입니다.

지정된 인덱스는 1, codePointOffset은 3입니다.

 

offset의 의미는 보통 지점 간의 변위 차이를 의미합니다.

간단하게 설명하면 몇 칸 점프할지 정하는 것입니다.

그래서 1에서 3만큼 오프셋한 인덱스 값이 4이기 때문에 4가 리턴됩니다.

 

또다른 예시를 들어보겠습니다.

String s = "abcdefghijklmnopqrstuvwxyz";
for(int i = 0; i < s.length() - 3; i = i + 2) {
	System.out.println("index: " + i + ", " + s.charAt(s.offsetByCodePoints(i, 3)) + " ");
}

offsetByCodePoints 응용코드 실행결과

해당 코드는 특정 인덱스 기준 +3칸 점프한 곳의 문자를 출력하는 코드입니다.

반복문으로 0부터 2칸씩 돌며

0은 3번째 문자 d

2는 5번째 문자 f

... 

22는 25번째 문자 z를 출력합니다.

 

codePointAt은 코드 포인트 즉 문자의 유니코드를, offsetByCodePoints는 코드 포인트의 위치(인덱스)를 반환한다는 차이가 있습니다.

적절히 잘 사용한다면 유용하게 쓸 수 있을 것 같습니다.