문자열 반전 함수와 초대형 문자 집합

2580 단어 jdkswingextJ#
 public AbstractStringBuilder reverse() {
	boolean hasSurrogate = false;
	int n = count - 1;
// 
	for (int j = (n-1) >> 1;j >= 0; --j) {
	    char temp = value[j];
	    char temp2 = value[n - j];
	    if (!hasSurrogate) {
		hasSurrogate = (temp >= Character.MIN_SURROGATE && temp <= Character.MAX_SURROGATE)
		    || (temp2 >= Character.MIN_SURROGATE && temp2 <= Character.MAX_SURROGATE);
	    }
	    value[j] = temp2;
	    value[n - j] = temp;
	}
	if (hasSurrogate) {
	    // Reverse back all valid surrogate pairs
	    for (int i = 0; i < count - 1; i++) {
		char c2 = value[i];
		if (Character.isLowSurrogate(c2)) {
		    char c1 = value[i + 1];
		    if (Character.isHighSurrogate(c1)) {
			value[i++] = c1;
			value[i] = c2;
		    }
		}
	    }
	}
	return this;
    }

소스를 봤을 때 has Surrogate라는 게 잘 모르겠어요.
자료를 찾아보니 탁 트였다
EasyJF 공식 사이트가 전면적으로 업그레이드되고 EasyJF 개원팀도 전면적으로 개편될 것입니다. 귀중한 의견과 건의를 해 주시기를 기대합니다!
현재 위치: 홈페이지-MyRss-Java 고급 응용 프로그램
JDK 1.5 하이퍼텍스트 세트 지원
저자: 본 사이트 회원 출처: 발표 시간: 2009-04-07 20:46:12
JDK 1.5 하이퍼텍스트 세트 지원
유니코드 및 하이퍼텍스트 세트
국표 GB18030은 4바이트 확장 부분을 규정했는데 이 부분은 현재 유니코드 규범에서 CJK Ext B 구역으로 존재한다. 즉, 흔히 말하는 중국어 초대형 문자 집합이다.이 섹션은\U20000 -\U2A6D6로 인코딩됩니다.
UTF-16 및 Java String/Character 객체
완전한 유니코드 문자는 코드점/CodePoint라고 하고, Javachar는 코드단원codeunit라고 합니다.
String 대상은 UTF-16로 유니코드 문자를 저장하는데 두 문자로 초대형 문자 집합의 한자를 표시해야 한다. 이런 표현 방식을 Surrogate라고 하는데 첫 번째 문자는 Surrogate High이고 두 번째는 Surrogate Low라고 한다.
char가 Surrogate 영역의 문자인지 판단하려면 Character의 isHighSurrogate()/isLowSurrogate() 방법을 사용합니다.
두 개의 Surrogate High/Low 문자에서 전체 Unicode CodePoint용 Character를 반환합니다.toCodePoint()/codePointAt() 메서드입니다.
코드 포인트가 하나 필요할 수도 있고 두 개의 char 표시가 필요할 수도 있기 때문에 CharSequence를 직접 사용할 수 없습니다.length () 방법은 문자열이 도대체 몇 개의 한자가 있는지 직접 되돌려주고 String을 사용해야 합니다.codePointCount()/Character.codePointCount().
문자열의 N 번째 문자를 찾으려면 N을 오프셋으로 사용할 수 없고, 문자열 머리에서 순서대로 옮겨야 하며, String/Character를 사용해야 합니다.offsetByCodePoints() 메서드.
문자열의 현재 문자열에서 이전 문자를 찾을 수도 없고 offset --로 실행할 수도 없고 String을 사용해야 합니다.codePointBefore()/Character.codePointBefore() 또는 String/Character를 사용합니다.offsetByCodePoints()
현재 문자에서 다음 문자를 찾으려면 offset++로 직접 실행할 수 없습니다. 현재 CodePoint의 길이를 판단한 후 계산하거나 String/Character로 계산해야 합니다.offsetByCodePoints() .
Swing 하이퍼텍스트 세트 지원
JtextPane은 글꼴을 올바르게 설정하면 초대형 문자 집합을 표시하고 편집할 수 있는 초대형 문자 집합에 대한 지원을 추가했습니다.

좋은 웹페이지 즐겨찾기