Java 中的词典顺序
2022-09-03 17:18:14
如何在Java中定义词典顺序,特别是引用特殊字符,如,等等?!
.
可在此处找到考试顺序
但是Java是如何定义它的顺序的呢?我问是因为我正在Java和Oracle上对字符串进行排序,并得出不同的结果,并且找不到词典顺序的规范。
如何在Java中定义词典顺序,特别是引用特殊字符,如,等等?!
.
可在此处找到考试顺序
但是Java是如何定义它的顺序的呢?我问是因为我正在Java和Oracle上对字符串进行排序,并得出不同的结果,并且找不到词典顺序的规范。
按字典顺序比较两个字符串。比较基于字符串中每个字符的 Unicode 值。
和
这就是词典排序的定义。如果两个字符串不同,则它们要么在某个索引处具有不同的字符,该索引是两个字符串的有效索引,要么它们的长度不同,或者两者兼而有之。如果它们在一个或多个索引位置具有不同的字符,则设 k 为最小的此类索引;则其字符在位置 k 处的值较小的字符串(通过使用 < 运算符确定)在字典上位于另一个字符串之前。在这种情况下,compareTo 返回两个字符串中位置 k 处的两个字符值的差值 [...]
因此,基本上,它将每个字符串视为16位无符号整数的序列。没有文化意识,没有对复合字符的理解等。如果你想要一种更复杂的排序,你应该看看Collator
。
在Java中,它基于字符串的Unicode值:
http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#compareTo(java.lang.String)
在 Oracle 中,这取决于您在数据库上使用的字符集。您需要它是 UTF-8,以便与 Java 具有一致的行为。
要检查字符集:
SQL> SELECT parameter, value FROM nls_database_parameters
WHERE parameter = 'NLS_CHARACTERSET';
PARAMETER VALUE
------------------ ---------------------
NLS_CHARACTERSET UTF8
如果不是 UTF-8,则可以根据 Oracle 数据库使用的字符集获得不同的比较行为。