2012-08-15 3 views
4

Java 문자열 사전 순 정렬 목록이 [s1,s2,s3,s4, ...., sn] 인 경우 각 문자열을 UTF-8 인코딩 bx = sx.getBytes("UTF-8")을 사용하여 바이트 배열로 변환하면 바이트 배열 목록 [b1,b2,b3,...bn]도 사전 식 정렬됩니까?Java String.getBytes ("UTF-8")은 어휘 순위를 유지합니까?

+2

UTF-8이 가변 폭 인코딩이므로 정렬 순서가 유지되지 않는다고 말할 수 있습니다. –

+0

질문에 이해가 가지 않습니다. 비트/바이트를 사전 순으로 정렬하는 방법은 무엇입니까? 해당 비트/바이트를 매핑하는 문자 집합이 결정 요소입니다. –

+0

@Brian Roach 바이트 배열의 사전 순서는 문자열의 사전 순서와 유사합니다. 그냥 "x에서 문자"를 "x에서 바이트"로 바꿉니다. 예 : http://stackoverflow.com/questions/5108091/java-comparator-for-byte-array-lexicographic – Carsten

답변

5

예. RFC 3239 따르면 : 문자 숫자로 지시하는 것처럼

UTF-8 스트링의 바이트 값의 사전 식 정렬 순서는 동일하다. 물론 이것은 문자 숫자에 기초한 정렬 순서가 이기 때문에 문화적으로 유효하지 않으므로 의 관심이 제한적입니다. 이안 로버츠는 지적

,이 "진정한 UTF-8 (예 : String.getBytes로 당신을 줄 것이다)"하지만, 분류되는, DataInputStream's fake UTF-8 조심 적용 [U + 000000] 후 [U + 000001 ]와 [U + 00FF000]을 입력합니다.

+0

완성을 위해 _true_ UTF-8 ('String.getBytes'가 줄 것입니다.)하지만 DataInputStream에 의해 사용되는 "[수정 된 UTF-8] (http://docs.oracle.com/javase/6/docs/api/java/io/DataInput.html#modified-utf-8)"일 필요는 없습니다. 그리고 친구들. –

+0

@IanRoberts : 맞습니다. 실제로 수정 된 UTF-8은 [U + 000001]과 [U + 00FF000] 이후에 [U + 000000]을 정렬합니다. –

+0

이 답변이 맞습니까? 유니 코드 코드 포인트보다는 UTF-16을 기반으로 한 문자열에 대한 일반적인 Java 사전적인 순서가 아닌가요? –

-2

주어진 orden에서 객체 X의 목록/배열을 가져옵니다.

메서드를 적용하여 이러한 개체의 새 목록/배열 Y를 만듭니다.

Y에는 사용자가 만든 순서가 있습니다 (보통 X 순서 만 유지할 것입니다). 재정렬이 발생하지 않습니다.

또한 바이트 []에 대한 lexycographical 순서는 의미가 없습니다.

+3

바이트 []의 사전 식 순서는 의미가 없습니다. 예 : http://stackoverflow.com/questions/5108091/java-comparator-for-byte-array-lexicographic – Carsten