【问题标题】:Java sort strings in codepoint (UTF-32) orderJava 按代码点 (UTF-32) 顺序对字符串进行排序
【发布时间】:2010-01-22 20:45:18
【问题描述】:

除了转换为 UTF-8 字节或编写一个迭代和比较的比较函数之外,我在 JDK 1.6 中是否缺少一些方法,它以完整的 Unicode 代码点顺序而不是 UCS-2 代码点比较两个字符串订购?

我很欣赏这不是一件很难编码的事情。然而,我感到困惑的是,1.6 在java.lang.String 中具有各种“代码点”API 以及排序系统,但显然没有什么可以简单地比较两个字符串而不打嗝代理。

为了评论者的利益,我必须将一些数据提供给需要按此顺序排列的字符串的工具。

【问题讨论】:

  • 默认情况下已经这样做了?还是您实际上想在排序中考虑变音符号?例如。 aaab 而不是(默认)aaab?否则我看不出这个问题有任何理由:)
  • String.compareTo 至少在 Sun 的 JVM 1.6.0_16 中被实现为包含的字符的比较。如果字符串包含 BMP 之外的字符的代理对,这将不适用于 bmargulies 要求。
  • 实际上,这种行为在 API 文档中有描述,因此基于字符值的 compareTo 并不是 Sun 的 VM 的实现细节。
  • 在当前的 Java 1.8/1.9 API 中有解决方案吗?或者可能在图书馆内?

标签: java unicode compare


【解决方案1】:

AFAIk,API 没有这样的方法,但自己实现应该很简单。只是出于好奇:你需要这样的东西做什么?

【讨论】:

    【解决方案2】:

    为了完整起见,我对问题的解决方案。也许有更好的解决方案:

       String sortedText = text
          .codePoints()
          .sorted()
          .mapToObj(i -> String.valueOf(Character.toChars(i)))
          .collect(Collectors.joining(""));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 2021-07-05
      • 1970-01-01
      • 2013-08-22
      • 2013-09-04
      • 1970-01-01
      相关资源
      最近更新 更多