小编ele*_*pes的帖子

使用Locale.SIMPLIFIED_CHINESE使用Collat​​or进行错误的排序

我正在尝试使用Locale.SIMPLIFIED_CHINESE来订购中文国家列表,这似乎是它使用拼音(拼音字母表,即根据他们的拉丁语对应组合从A到Z排序的字符).

但是我发现了一些订单不好的情况.例如:

  • '中'字符是zhong1
  • '梵'的角色是粉丝4

正确的顺序应该是梵<中,而是以其他方式订购.

String[] characters = new String[] {"?", "?"};
List<String> list = Arrays.asList(characters);
System.out.println("Before sorting...");
System.out.println(list.toString());

Collator collator = Collator.getInstance(Locale.SIMPLIFIED_CHINESE);
collator.setStrength(Collator.PRIMARY);
Collections.sort(list, collator);

System.out.println("After sorting...");
System.out.println(list.toString());
Run Code Online (Sandbox Code Playgroud)

这个片段的结果是:

Before sorting...
[?, ?]
After sorting...
[?, ?]
Run Code Online (Sandbox Code Playgroud)

更进一步,我发现Java适用于Locale.SIMPLIFIED_CHINESE的规则.您可以在下一张图片中找到: https://postimg.cc/image/4t915a7gp/full/(注意梵在中后)

我在用红色突出显示的<口<口<口<口之前意识到,所有字符都根据他们的拉丁记者组合从A到Z排序.但是,在<口<口<口<口<口之后符号,字符按字符的组成排序.例如,如果所有字符都具有相同的部分(通常是字符的左侧部分),则它们将组合在一起,而不是根据A到Z规则.

此外,<口<口<口<口<口之后的所有字符都是不常见的汉字.所以,梵是一个比中国更不常见的角色,所以它放在<口<口<口<口<口之后.

我想知道为什么这个决定,如果它是故意的.但它会导致错误的排序.我不知道如何找到解决方案.

java sorting character collation chinese-locale

12
推荐指数
1
解决办法
886
查看次数

使用==运算符进行原始对象比较

我想知道下一个代码片段的内部Java行为是什么:

Long a = 123L;
long b = 123;
System.out.println("a equals b?: " + (a == b));
Run Code Online (Sandbox Code Playgroud)

结果是true虽然比较两个Long对象false(因为它比较了他们的参考).它是Java将Long对象转换为其原始值,因为检测==操作符对另一个原始对象?

java comparison long-integer

4
推荐指数
1
解决办法
414
查看次数