[매일 하나의 지식 포인트] 6 - Java 언어 - char 및 code point

java.랑스트링에는 두 가지 방법이 있어요.char charAt(int index) Returns the  char  value at the specified index. int codePointAt(int index) Returns the character (Unicode code point) at the specified index.
이 두 가지 방법의 묘사를 자세히 살펴보면 정상적으로 의문이 생길 수 있다.char와 유니버설 코드 포인트는 어떤 차이가 있습니까?(유니코드 이해 제외)
아마도 많은 사람들이 자바가 사용하는 것이 유니버설이라는 것을 알고 있을 것이다. 사실 대부분은ucs와utf를 구분하지 못한다. 정확히 말하면 자바는utf-16 인코딩을 사용하고utf-16 인코딩은ucs를 표현한다.이 세부 사항의 차이는 문자열이 자바에 저장될 때 모든 문자가 하나의 저장 위치를 차지한다는 보편적인 오해를 초래했다.실제utf-16은 전체ucs-4 문자 집합을 표현할 수 있지만 BMP의 문자는 16자리 정수 1개(이 구역에서 중국어 문자는 20927개), 다른 평면의 문자는 16자리 정수 2개로 저장할 뿐이다.
즉, 보기 드문 경우에 String.length()는 문자열의 길이보다 깁니다.다음 코드를 실행해서 느낌을 찾을 수 있습니다.
package test;

public class Test {
    public static String str = "\uD800\uDC00a ";

    public static void main(String[] args) {
        System.out.printf("str.length(): %d
", str.length());         System.out.printf("str.codePointCount(0, 1): %d
", str.codePointCount(0, 1));         System.out.printf("str.codePointCount(0, 2): %d
", str.codePointCount(0, 2));         System.out.printf("str.codePointCount(0, 3): %d
", str.codePointCount(0, 3));         System.out.printf("str.codePointCount(0, str.length()): %d
", str.codePointCount(0, str.length()));         System.out.printf("str: %s
", str);         System.out.printf("str.charAt(0): %c
", str.charAt(0));         System.out.printf("str.codePointAt(0): %d
", str.codePointAt(0));         System.out.printf("str.codePointAt(1): %d
", str.codePointAt(1));     } }

마지막 문제, 이걸 알면 무슨 소용이야?이 문제는 대답하기 어렵다.80/20법칙에 따라 20%의 관건적인 문제를 해결하면 80%의 장면을 적용할 수 있다.추상적으로 말하면 모든 문제는 90%(대다수 상황에서는 이렇게 높지 않다), 16개의 문제가 중첩된 상황에서 완전하게 해결할 확률은 0.1853이다. 그래서 왜 우리는 자신이 많은 것을 알고 코드를 잘 쓰지 못한다고 생각하는가.모든 세부 사항을 좀 더 잘 알면 자신이 일을 좀 수월하게 하는 데 도움이 된다.그러나 당신이 해결하는 모든 문제에서 당신이 알고 있는 10만 가지 세부 사항 중 어느 것이 당신을 구했는지 영원히 예측할 수 없다.

좋은 웹페이지 즐겨찾기