어제 오늘 내일

[Java] String / codePointCount(int beginIndex, int endIndex) 사용법 및 예제 본문

IT/Java

[Java] String / codePointCount(int beginIndex, int endIndex) 사용법 및 예제

hi.anna 2024. 12. 9. 21:42

 

codePointCount(int beginIndex, int endIndex)

문자열에서 특정 범위 내의 유니코드 코드 포인트 수를 반환하는 메소드입니다.

코드 포인트는 유니코드에서 문자를 표현하는 고유한 숫자 값입니다.

유니코드는 여러 바이트로 구성된 문자를 처리할 수 있기 때문에,

한 문자가 여러 코드 유닛(16비트 값)으로 나뉠 수 있습니다. (surrogate pair)

codePointCount() 메소드는 이러한 실제 유니코드 코드포인트의 개수를 리턴합니다.

Syntax

java.lang.String
public int codePointCount(int beginIndex, int endIndex)

 

  매개변수  

int beginIndex

유니코드 코드 포인트 수를 계산할 시작 인덱스 (포함)

 

int endIndex

유니코드 코드 포인트 수를 계산할 끝 인덱스(불포함)

 

  리턴 값  

beginIndex와 endIndex 사이에 포함된 코드 포인트의 

 

  예외  

IndexOutOfBoundsException

주어진 인덱스 값이 잘못된 범위에 있을 때 발생

  • beginIndex가 음수인 경우
  • endIndex가 문자열의 길이보다 큰 경우
  • beginIndex가 endIndex보다 큰 경

 

예제. 

  코드  

public class CodePointCountExample {
    public static void main(String[] args) {
        String str = "Hello, 🌍!";

        // 문자열 length 구하기
        int strLength = str.length();
        System.out.println("문자열 길이: " + strLength);

        // 문자열 전체의 유니코드 코드 포인트 수 구하기
        int totalCodePoints = str.codePointCount(0, strLength);
        System.out.println("문자열 전체 코드포인트: " + totalCodePoints);

        // "Hello" 부분의 코드 포인트 수
        int helloCodePoints = str.codePointCount(0, 5);
        System.out.println("Hello 코드 포인트: " + helloCodePoints);

        // "🌍" 이모지 부분의 코드 포인트 수
        int emojiCodePoints = str.codePointCount(7, 9);
        System.out.println("🌍 코드 포인트: " + emojiCodePoints);
    }
}

 

  결과  

문자열 길이: 10
문자열 전체 코드포인트: 9
Hello 코드 포인트: 5
🌍 코드 포인트: 1

 

  설명  

str.length()

문자열의 UTF-16 코드 유닛 개수를 리턴합니다.

UTF-16에서 문자열을 구성하는 문자가 1개일 경우 1개의 코드 유닛을 차지하지만,

🌍와 같은 이모지는 2개의 코드 유닛으로 구성됩니다.

 

str.codePointCount(0, strLength);

문자열 전체의 유니코드 코드 포인트 수를 리턴합니다.

🌍는 1개의 코드 포인트로 계산됩니다.

 

str.codePointCount(0, 5);

Hello 부분의 코드 포인트 수를 리턴합니다.

 

str.codePointCount(7, 9);

🌍 부분의 코드 포인트 수를 계산합니다.

이모지 🌍는 두개의 char 값으로 표현되지만, 실제 유니코드 코드 포인트는 1입니다.

 

 

 

 

 

반응형
Comments