【问题标题】:In Java, is it required a Collator for exact utf-8 string matching?在 Java 中,是否需要 Collat​​or 才能进行精确的 utf-8 字符串匹配?
【发布时间】:2011-07-13 14:21:06
【问题描述】:

在 java 中比较两个 utf-8 字符串(一个是文本,另一个是要查找的模式)以进行精确匹配时,是否需要使用 Collat​​or 或者是否足以规范化两个字符串并使用简单的charAt 比较?

有关国际化文本搜索和使用 Collat​​ors 的更多信息,请查看http://www.developertutorials.com/tutorials/java/text-searching-java-050524-1453/

示例:在西班牙语中“ch”可能是一个字母,而在英语中是两个字母。所以“恰帕斯”这个词可能看起来一样,但如果不考虑这一点,匹配就会失败。

【问题讨论】:

  • “UTF-8 字符串”是什么意思?当它在 Java 中是 String 时,原来的二进制编码已经无关紧要了。
  • 你能给我们举个例子,把两个“完全匹配”的字符串作为边缘情况,所以我们知道你的意思吗?
  • 示例:在西班牙语中“ch”可能是一个字母,而在英语中是两个字母。所以“恰帕斯”这个词可能看起来一样,但如果不考虑这一点,匹配就会失败。

标签: java utf-8 internationalization


【解决方案1】:

如果您搜索完全匹配,我认为标准化就足够了。如果只有 Collator.PRIMARY 差异才有意义,您将需要 Collator

【讨论】:

    【解决方案2】:

    String.equals 已经进行了逐字符比较,因此对于完全匹配(即不考虑 normalization 等),您可以使用它。

    【讨论】:

    • 我需要考虑规范化,因为我要处理不同语言的文本。
    • @rreyes 那么对你来说什么是“完全匹配”?
    • RReyes,它会逐个字符地进行匹配。 Artefacto 暗示的是,如果您通过国际化库使用字符串替换,它将无法将意大利版字符串与德国版匹配。相同的语言匹配不是问题。
    • @rreyes 顺便说一句,“我需要考虑规范化,因为我要处理不同语言的文本”对我来说真的没有意义;我看不出因果关系。
    • @Artefacto 查找文本中出现模式的所有位置。
    【解决方案3】:

    只需使用String.equals()

    仅供参考 String.getBytes() 方法 returns an array of bytes in UTF-8 format,但这与比较“完全匹配”无关 - 这就是 String.equals(String) 所做的。

    【讨论】:

    【解决方案4】:

    整理器用于排序。 String.equals() 用于相等比较。

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 2021-10-18
      • 1970-01-01
      相关资源
      最近更新 更多