【问题标题】:java unicode value of charchar的java unicode值
【发布时间】:2014-03-29 18:51:36
【问题描述】:

当我执行 Collection.sort(List) 时,它会根据 String 的 compareTo() 逻辑进行排序,它会逐个字符地比较两个字符串。

    List<String> file1 = new ArrayList<String>();
    file1.add("1,7,zz");
    file1.add("11,2,xx");
    file1.add("331,5,yy");
    Collections.sort(file1);

我的理解是 char 表示它指定 unicode 值,我想知道 char 的 unicode 值,例如 ,(comma) 等。我该怎么做?任何 url 都包含这些的数值?

【问题讨论】:

  • 将其类型转换为int 会起作用。

标签: java string compare compareto


【解决方案1】:

我的理解是 char 表示它指定 unicode 值,我想知道 char 的 unicode 值,例如 ,(comma) 等

嗯,有一个从 charint 的隐式转换,您可以轻松打印出来:

int value = ',';
System.out.println(value); // Prints 44

这是char 的UTF-16 代码单元。 (正如 fge 所指出的,Java 中的 char 是 UTF-16 代码单元,而不是 Unicode 字符。有大于 65535 的 Unicode 代码点,表示为两个 UTF-16 代码单元。)

任何网址都包含这些数值?

是的 - 有关 Unicode 的更多信息,请访问Unicode web site

【讨论】:

  • 我不知道为什么它没有打动我 :( 谢谢。但我无法从 Unicode 网站获取此图表/列表 :(
【解决方案2】:

嗯,不,char 不是“unicode 值”(使用的词是 Unicodecode point)。

char 是 UTF-16 编码中的代码单元。碰巧在 Unicode 的基本多语言平面中(即,Unicode 代码点从 U+0000 到 U+FFFF,对于在此范围内定义的代码点),是的,char 之间存在一对一的映射和 Unicode。

要知道代码点的 数字 值,您可以这样做:

System.out.println((int) myString.charAt(0));

但这不是 BMP 之外的代码点的情况。对于这些,一个代码点转换为两个字符。见Character.toChars()。更一般地说,Character 中的所有静态方法都与代码点有关。有不少!

这也意味着String.length() 实际上具有误导性,因为它返回的是字符数,而不是字素数。

使用Unicode emoticon(该页面中的第一个)进行演示:

System.out.println(new String(Character.toChars(0x1f600)).length())

打印2。鉴于:

final String s = new String(Character.toChars(0x1f600));
System.out.println(s.codePointCount(0, s.length());

打印1

【讨论】:

  • length() 实际上并没有说谎。 javadoc 说明了它返回的内容,即 unicode 代码单元。
  • @SotiriosDelimanolis 这并不能防止它被名称误导......但是是的,我将编辑文本以使其更清晰。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-11
  • 2021-07-31
  • 2016-03-20
相关资源
最近更新 更多