Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的词典顺序_Java_Lexicographic - Fatal编程技术网

Java中的词典顺序

Java中的词典顺序,java,lexicographic,Java,Lexicographic,在Java中如何定义词典顺序,特别是在引用像这样的特殊字符时,等等 可以找到一个示例顺序 但是Java如何定义它的顺序呢?我这样问是因为我正在对Java和Oracle上的字符串进行排序,结果不同,无法找到字典顺序的规范。来自以下文档: 按字典顺序比较两个字符串。比较基于字符串中每个字符的Unicode值 及 这是词典排序的定义。如果两个字符串不同,则要么它们在某个索引处具有不同的字符,该索引是两个字符串的有效索引,要么它们的长度不同,要么两者都不同。如果它们在一个或多个索引位置具有不同的字符,则

在Java中如何定义词典顺序,特别是在引用像
这样的特殊字符时
等等

可以找到一个示例顺序

但是Java如何定义它的顺序呢?我这样问是因为我正在对Java和Oracle上的字符串进行排序,结果不同,无法找到字典顺序的规范。

来自以下文档:

按字典顺序比较两个字符串。比较基于字符串中每个字符的Unicode值

这是词典排序的定义。如果两个字符串不同,则要么它们在某个索引处具有不同的字符,该索引是两个字符串的有效索引,要么它们的长度不同,要么两者都不同。如果它们在一个或多个索引位置具有不同的字符,则k是此类索引的最小值;然后,使用<运算符确定其在位置k处的字符具有较小值的字符串按字典顺序位于另一个字符串之前。在本例中,compareTo返回两个字符串[…]中位置k处两个字符值的差值

因此,基本上,它将每个字符串视为16位无符号整数序列。没有文化意识,不了解复合字符等。如果您想要更复杂的排序,您应该查看。

来自:

比较基于字符串中每个字符的Unicode值

更详细的信息:

这是词典排序的定义。如果有两个字符串 那就不同了 或者它们在某个索引处具有不同的字符,而该索引对两者都是有效的索引 字符串,或其长度不同,或两者都不同。如果他们有不同的性格 在一个或多个索引位置,让k为此类索引的最小值;然后是谁的字符串 位置k处的字符具有较小的值,由<运算符确定, 按字典顺序在另一个字符串之前。在这种情况下,compareTo返回 两个字符串中位置k处的两个字符值之差


在Java中,它基于字符串的Unicode值:

)

在Oracle中,它将取决于您在数据库上使用的字符集。您会希望它是UTF-8,以便与Java具有一致的行为

要检查字符集,请执行以下操作:

SQL> SELECT parameter, value FROM nls_database_parameters 
     WHERE parameter = 'NLS_CHARACTERSET';

PARAMETER             VALUE 
------------------    ---------------------
NLS_CHARACTERSET      UTF8
如果不是UTF-8,那么您可以根据Oracle数据库使用的字符集获得不同的比较行为。

希望这有帮助

员工根据分数的降序排序,如果两个不同的员工有相同的分数,那么我们需要考虑员工姓名来进行词典分类。

Employee类实现:(在本例中使用了可比较的接口。)

@覆盖
公共整数比较(对象对象对象){
员工emp=(员工)obj;
if(emp.getScore()>this.score)返回1;
else if(emp.getScore()
尽管这条评论对我帮助最大,但由于问题的措辞,我将@jonskeet answer标记为正确。结果表明,数据库使用的是
alutf8
编码(默认),而不是
utf8
。出于测试目的,我使用
utf8
建立了一个数据库,所有内容都按预期排序
alutf8
orders.“.”在使用
utf8时,字符后(对我来说是一个“M”)会导致在“M”之前排序“.”。非常烦人。如果您需要更改自然语言的顺序或匹配Oracle的顺序,请参阅java.text.Collator。
@Override
public int compareTo(Object obj) {
    Employee emp = (Employee) obj;

    if(emp.getScore() > this.score) return 1;
    else if(emp.getScore() < this.score) return -1;
    else
        return emp.getEmpName().compareToIgnoreCase(this.empName) * -1;
}