【问题标题】:Iterate through unicode characters dynamically动态遍历 unicode 字符
【发布时间】:2017-05-03 18:06:56
【问题描述】:

我正在 Android Studio 中编写一个可以计算句子中每个字母出现次数的应用程序。例如:

// Input
String sentence = "abbdddd";

// Output
a:1; b:2; c:0; d:4; e:0; f:0; // And so on

但是,我也希望它计算阿姆哈拉语字符,所以如果我输入:

String sentence = "abcሀሁሂ"; 

它会给我:

a:1; b:1; c:1 ... ሀ:1; ሁ:1; ሂ:1;

目前,我有两个 ArrayList,cycle 和 letterCount。循环具有输入句子的任何字母可能的所有可能字符。 letterCount 与 cycle 的大小相同,并且在运行时,每个值都等于 0。当您输入一个句子时,它会在循环中查找任何匹配项(如果字母是英语或阿姆哈拉语,它应该会找到)。当它找到匹配项时,它会转到 letterCount 并将相应的值加一。因此,如果句子中的第一个字母是“a”,那么它会转到 letterCount 的第一个值并加一个。如果它是“c”,则它转到 letterCount 的第三个值并加一。 cycle 和 letterCount 中的值是使用 for 循环动态添加的:

    for (int i = 97; i < 123; i++) {
        char val = (char)i; // This is where the problem lies...I think
        cycle.add(val);
        letterCount.add(0);
    }

但是,执行“(char)i”会将其转换为不包括阿姆哈拉语字符的 ASCII 字符。那么有没有办法,而不是循环通过 ASCII,循环通过 unicode 字符并将它们添加到循环中?任何帮助将不胜感激。

【问题讨论】:

    标签: java android for-loop unicode


    【解决方案1】:

    U+1200 到 U+137F 范围内的 Unicode 涵盖了埃塞俄比亚语和阿姆哈拉语,因此它存在于 BMP(基本多语言平面)中,可以用 16 位值表示。

    执行 "(char)i" 会将其转换为 ASCII 字符 [???]

    错误。与其他一些语言不同,Java 中的 char 有 2 个字节大,因此足以满足您的目的。

    欲了解更多信息,请参阅:Comparing a char to a code-point?

    【讨论】:

    • 感谢您的回复!但是,我的意思是,从我搜索的内容来看,阿姆哈拉语的 unicode 值包括字母(例如:\u126B),我不确定如何遍历字母和数字。我也不想将它硬编码到 ArrayLists 中,因为有很多阿姆哈拉语字符。我应该改写我的问题吗?
    • 我仍然不确定您要问什么。你需要决定如何准确地表达你不知道如何做的部分。例如,您是否意识到 Unicode 代码点可以用十六进制文字表示法写成整数? int i = 0x126B
    • 我现在解决了。我需要的是某种方式(不必是 unicode)将数字转换为相应的字符。我使用的代码是这样的: for (int i = 4608; i
    • @Mister_Maybe 如果不清楚,char 是一个 UTF-16 代码单元,其中一个或两个编码一个 Unicode 代码点。因此,您对“不必是 Unicode”和“ASCII 字符”的引用令人困惑。为了扩展@Patrick 的评论,UTF-16 被 Java、JavaScript、C#、VB、Windows API、Windows NTFS 使用,并且几乎总是被 Linux ext3、ext4 使用。此外,Unicode 被 HTML、CSS、XML 等使用。除非您正在查看规范(例如,RFC 7540),否则您可以假设对 ASCII 的引用是不合适的。
    猜你喜欢
    • 2023-02-21
    • 1970-01-01
    • 2016-02-20
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    相关资源
    最近更新 更多