【问题标题】:Unicode - Extract chars in a String contains Tamil letters in JavaUnicode - 提取字符串中的字符包含 Java 中的泰米尔语字母
【发布时间】:2019-03-07 01:21:51
【问题描述】:

我正在努力支持系统中的 unicode 字符,因此我想将字符拆分为包含泰米尔语字母的字符串。我不知道在 Java 中处理英语以外的字符串。

String word = new String("தமிழ்")
String[] chars = word.split("")

输出了什么

[த, ம, ி, ழ, ்]

预期结果

[த, மி, ழ்]

【问题讨论】:

    标签: java unicode-string


    【解决方案1】:

    分配给“word”的字符串实际上是 5 个 Unicode 字符。第三个字符,例如 (U+0BFF) 与前一个字符 (U+0BAE?) 组合成一个显示符号。

    由于您将单词拆分为字符,因此您将得到 5 个字符。没有像(例如)原始字符串中显示的中间符号这样的单个字符。

    由于组合字符,屏幕上显示的符号数量不一定与 Unicode 字符的数量相同。一般来说,呈现 Unicode 字符串的程序必须能够识别字符的组合。

    有关 Unicode 中泰米尔语的问题,请参阅 this document。图 12-21 讨论了 i 元音,它是 5 的中间字符。

    目前尚不清楚您拆分字符串的目的。如果您真的想要“表观符号”(我正在编造这个术语),那么您可能需要扫描生成的字符以查找组合字符。

    This document 描述了一种似乎对您有用的方法,尽管该页面说 JDK 8 之后的版本中有更好的工具,我没有花时间去寻找。不过,这可能会更彻底地说明正在发生的事情。

    【讨论】:

    • 是的,我理解它显示 5 个字符的问题。我使用 REGEX 来解析/拆分/处理包含泰米尔语字母的字符串
    • 错误的工作工具,那么? split 处理 Unicode 字符,而不是我笨拙地称为“表观符号”的东西。您可以编写一个更复杂的正则表达式来处理 字符单元后跟一些组合字符,但这不是split 的使用,BreakIterator 解决方案看起来更有吸引力我。
    • 您可以尝试在正则表达式 (?U)(?!\p{Mc}) 上拆分,但我对此没有信心,尤其是 Mc 部分。您可能还必须先设置语言环境。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 2023-03-25
    • 2017-01-24
    相关资源
    最近更新 更多