在java中使用大型unicode标志

时间:2016-05-29 15:46:00

标签: unicode character-encoding integer compression character

我正在为学校编写一个应该压缩文本的程序。所以起初我想从大量文本中构建一种字典,以便以后压缩。

我的想法是,如果我有2个标志,我想只用1替换它。所以首先我建立一个树形图,其中包含我在String中的所有对。 例如:String s = "Hello";

He -> 1

el -> 1

ll -> 1

lo -> 1

最后我的Treemap值不同,在给定点我想在我的字典中编写规则。例如:

He -> x

el -> y

lo -> z

所以这就是重点。我想从unicode号码65536处的“新标志”开始,并希望将每个规则的值增加1。 当我想重新分析我的文本对,我想我有一个错误,但我不确定这个..

TreeMap<String, Integer> map = new TreeMap<String, Integer>();
        char[] text = s.toCharArray();
        String signPair = "";

        // search sign in map
        for (int i = 0; i < s.length()-1; i++) {
            // 1.Zeichen prüfen ob >65535 ->2chars
            if (Character.codePointAt(text, i) > 65535) {

                // 2.sign checking >65535 ->2chars
                if (Character.codePointAt(text, i + 2) > 65535) {
                    signPair = s.substring(i, i + 4);
                    // compensate additional chars
                    i += 2;
                    // if not there
                    if (!map.containsKey(signPair)) {
                        // Key anlegen, Value auf 1 setzen
                        map.put(signPair, 1);
                    } else {
                        // Key vorhanden -> Value um 1 erhöhen
                        int value = map.get(signPair);
                        value++;
                        map.put(signPair, value);
                    }

最后,当我想在控制台中打印我的地图时,我只有第二个 标志..或者后来我也有很多我无法解释的-typ标志。在我的输出文本中,大多数符号介于5000和60000之间。没有人高于65535 ......

查看类似的字符和子字符串是错误的还是将代码点放在它们上面是错误的?

感谢您的帮助!

0 个答案:

没有答案