From 6875f2cb6a91069772b0e792f0fed65209976f2b Mon Sep 17 00:00:00 2001 From: jhengazuki Date: Sat, 4 Oct 2025 15:43:10 +0800 Subject: [PATCH] Optimize zhuin --- .../tv/ui/adapter/KeyboardAdapter.java | 2 +- .../com/github/catvod/utils/ZhuToPin.java | 364 +++++++++--------- 2 files changed, 173 insertions(+), 193 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/KeyboardAdapter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/KeyboardAdapter.java index ffb064cb3..01084ef02 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/KeyboardAdapter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/KeyboardAdapter.java @@ -21,7 +21,7 @@ public class KeyboardAdapter extends RecyclerView.Adapter icons = Arrays.asList(R.drawable.ic_keyboard_remote, R.drawable.ic_keyboard_left, R.drawable.ic_keyboard_right, R.drawable.ic_keyboard_back, R.drawable.ic_keyboard_search, R.drawable.ic_keyboard, R.drawable.ic_setting_home); private final List enList = Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"); - private final List twList = Arrays.asList("↩", "ㄅ", "ㄆ", "ㄇ", "ㄈ", "ㄉ", "ㄊ", "ㄋ", "ㄌ", "ㄍ", "ㄎ", "ㄏ", "ㄐ", "ㄑ", "ㄒ", "ㄓ", "ㄔ", "ㄕ", "ㄖ", "ㄗ", "ㄘ", "ㄙ", "ㄧ", "ㄨ", "ㄩ", "ㄚ", "ㄛ", "ㄜ", "ㄝ", "ㄞ", "ㄟ", "ㄠ", "ㄡ", "ㄢ", "ㄣ", "ㄤ", "ㄥ", "ㄦ", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"); + private final List twList = Arrays.asList("ㄅ", "ㄆ", "ㄇ", "ㄈ", "ㄉ", "ㄊ", "ㄋ", "ㄌ", "ㄍ", "ㄎ", "ㄏ", "ㄐ", "ㄑ", "ㄒ", "ㄓ", "ㄔ", "ㄕ", "ㄖ", "ㄗ", "ㄘ", "ㄙ", "ㄧ", "ㄨ", "ㄩ", "ㄚ", "ㄛ", "ㄜ", "ㄝ", "ㄞ", "ㄟ", "ㄠ", "ㄡ", "ㄢ", "ㄣ", "ㄤ", "ㄥ", "ㄦ", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"); private final OnClickListener mListener; private final List mItems; diff --git a/catvod/src/main/java/com/github/catvod/utils/ZhuToPin.java b/catvod/src/main/java/com/github/catvod/utils/ZhuToPin.java index 12a683c0b..7566ba54f 100644 --- a/catvod/src/main/java/com/github/catvod/utils/ZhuToPin.java +++ b/catvod/src/main/java/com/github/catvod/utils/ZhuToPin.java @@ -1,19 +1,16 @@ package com.github.catvod.utils; +import android.text.TextUtils; + import java.util.HashMap; import java.util.Map; public class ZhuToPin { + private static final int MAX_ZHUYIN_LEN = 3; private static final Map map = new HashMap<>(); static { - map.put("ㄅㄧㄝ", "bie"); - map.put("ㄅㄧㄠ", "biao"); - map.put("ㄅㄧㄢ", "bian"); - map.put("ㄅㄧㄣ", "bin"); - map.put("ㄅㄧㄥ", "bing"); - map.put("ㄅㄨ", "bu"); map.put("ㄅㄚ", "ba"); map.put("ㄅㄛ", "bo"); map.put("ㄅㄞ", "bai"); @@ -24,12 +21,12 @@ public class ZhuToPin { map.put("ㄅㄤ", "bang"); map.put("ㄅㄥ", "beng"); map.put("ㄅㄧ", "bi"); - map.put("ㄆㄧㄝ", "pie"); - map.put("ㄆㄧㄠ", "piao"); - map.put("ㄆㄧㄢ", "pian"); - map.put("ㄆㄧㄣ", "pin"); - map.put("ㄆㄧㄥ", "ping"); - map.put("ㄆㄨ", "pu"); + map.put("ㄅㄧㄝ", "bie"); + map.put("ㄅㄧㄠ", "biao"); + map.put("ㄅㄧㄢ", "bian"); + map.put("ㄅㄧㄣ", "bin"); + map.put("ㄅㄧㄥ", "bing"); + map.put("ㄅㄨ", "bu"); map.put("ㄆㄚ", "pa"); map.put("ㄆㄛ", "po"); map.put("ㄆㄞ", "pai"); @@ -41,12 +38,12 @@ public class ZhuToPin { map.put("ㄆㄤ", "pang"); map.put("ㄆㄥ", "peng"); map.put("ㄆㄧ", "pi"); - map.put("ㄇㄧㄝ", "mie"); - map.put("ㄇㄧㄠ", "miao"); - map.put("ㄇㄧㄡ", "miu"); - map.put("ㄇㄧㄢ", "mian"); - map.put("ㄇㄧㄣ", "min"); - map.put("ㄇㄨ", "mu"); + map.put("ㄆㄧㄝ", "pie"); + map.put("ㄆㄧㄠ", "piao"); + map.put("ㄆㄧㄢ", "pian"); + map.put("ㄆㄧㄣ", "pin"); + map.put("ㄆㄧㄥ", "ping"); + map.put("ㄆㄨ", "pu"); map.put("ㄇㄚ", "ma"); map.put("ㄇㄛ", "mo"); map.put("ㄇㄜ", "me"); @@ -59,9 +56,15 @@ public class ZhuToPin { map.put("ㄇㄤ", "mang"); map.put("ㄇㄥ", "meng"); map.put("ㄇㄧ", "mi"); + map.put("ㄇㄧㄝ", "mie"); + map.put("ㄇㄧㄠ", "miao"); + map.put("ㄇㄧㄡ", "miu"); + map.put("ㄇㄧㄢ", "mian"); + map.put("ㄇㄧㄣ", "min"); + map.put("ㄇㄧㄥ", "ming"); + map.put("ㄇㄨ", "mu"); map.put("ㄈㄚ", "fa"); map.put("ㄈㄛ", "fo"); - map.put("ㄈㄜ", "fe"); map.put("ㄈㄟ", "fei"); map.put("ㄈㄡ", "fou"); map.put("ㄈㄢ", "fan"); @@ -69,15 +72,6 @@ public class ZhuToPin { map.put("ㄈㄤ", "fang"); map.put("ㄈㄥ", "feng"); map.put("ㄈㄨ", "fu"); - map.put("ㄉㄧㄝ", "die"); - map.put("ㄉㄧㄠ", "diao"); - map.put("ㄉㄧㄡ", "diu"); - map.put("ㄉㄧㄢ", "dian"); - map.put("ㄉㄧㄥ", "ding"); - map.put("ㄉㄨㄛ", "duo"); - map.put("ㄉㄨㄟ", "dui"); - map.put("ㄉㄨㄢ", "duan"); - map.put("ㄉㄨㄣ", "dun"); map.put("ㄉㄚ", "da"); map.put("ㄉㄜ", "de"); map.put("ㄉㄞ", "dai"); @@ -85,19 +79,20 @@ public class ZhuToPin { map.put("ㄉㄠ", "dao"); map.put("ㄉㄡ", "dou"); map.put("ㄉㄢ", "dan"); - map.put("ㄉㄣ", "den"); map.put("ㄉㄤ", "dang"); map.put("ㄉㄥ", "deng"); map.put("ㄉㄧ", "di"); + map.put("ㄉㄧㄝ", "die"); + map.put("ㄉㄧㄠ", "diao"); + map.put("ㄉㄧㄡ", "diu"); + map.put("ㄉㄧㄢ", "dian"); + map.put("ㄉㄧㄥ", "ding"); map.put("ㄉㄨ", "du"); - map.put("ㄊㄧㄝ", "tie"); - map.put("ㄊㄧㄠ", "tiao"); - map.put("ㄊㄧㄢ", "tian"); - map.put("ㄊㄧㄥ", "ting"); - map.put("ㄊㄨㄛ", "tuo"); - map.put("ㄊㄨㄟ", "tui"); - map.put("ㄊㄨㄢ", "tuan"); - map.put("ㄊㄨㄣ", "tun"); + map.put("ㄉㄨㄛ", "duo"); + map.put("ㄉㄨㄟ", "dui"); + map.put("ㄉㄨㄢ", "duan"); + map.put("ㄉㄨㄣ", "dun"); + map.put("ㄉㄨㄥ", "dong"); map.put("ㄊㄚ", "ta"); map.put("ㄊㄜ", "te"); map.put("ㄊㄞ", "tai"); @@ -107,18 +102,16 @@ public class ZhuToPin { map.put("ㄊㄤ", "tang"); map.put("ㄊㄥ", "teng"); map.put("ㄊㄧ", "ti"); + map.put("ㄊㄧㄝ", "tie"); + map.put("ㄊㄧㄠ", "tiao"); + map.put("ㄊㄧㄢ", "tian"); + map.put("ㄊㄧㄥ", "ting"); map.put("ㄊㄨ", "tu"); - map.put("ㄋㄧㄝ", "nie"); - map.put("ㄋㄧㄠ", "niao"); - map.put("ㄋㄧㄡ", "niu"); - map.put("ㄋㄧㄢ", "nian"); - map.put("ㄋㄧㄣ", "nin"); - map.put("ㄋㄧㄤ", "niang"); - map.put("ㄋㄧㄥ", "ning"); - map.put("ㄋㄨㄛ", "nuo"); - map.put("ㄋㄨㄢ", "nuan"); - map.put("ㄋㄨㄣ", "nun"); - map.put("ㄋㄨㄥ", "nung"); + map.put("ㄊㄨㄛ", "tuo"); + map.put("ㄊㄨㄟ", "tui"); + map.put("ㄊㄨㄢ", "tuan"); + map.put("ㄊㄨㄣ", "tun"); + map.put("ㄊㄨㄥ", "tong"); map.put("ㄋㄚ", "na"); map.put("ㄋㄜ", "ne"); map.put("ㄋㄞ", "nai"); @@ -130,7 +123,30 @@ public class ZhuToPin { map.put("ㄋㄤ", "nang"); map.put("ㄋㄥ", "neng"); map.put("ㄋㄧ", "ni"); + map.put("ㄋㄧㄝ", "nie"); + map.put("ㄋㄧㄠ", "niao"); + map.put("ㄋㄧㄡ", "niu"); + map.put("ㄋㄧㄢ", "nian"); + map.put("ㄋㄧㄣ", "nin"); + map.put("ㄋㄧㄤ", "niang"); + map.put("ㄋㄧㄥ", "ning"); map.put("ㄋㄨ", "nu"); + map.put("ㄋㄨㄛ", "nuo"); + map.put("ㄋㄨㄢ", "nuan"); + map.put("ㄋㄨㄥ", "nong"); + map.put("ㄋㄩ", "nv"); + map.put("ㄋㄩㄝ", "nve"); + map.put("ㄌㄚ", "la"); + map.put("ㄌㄛ", "lo"); + map.put("ㄌㄜ", "le"); + map.put("ㄌㄞ", "lai"); + map.put("ㄌㄟ", "lei"); + map.put("ㄌㄠ", "lao"); + map.put("ㄌㄡ", "lou"); + map.put("ㄌㄢ", "lan"); + map.put("ㄌㄤ", "lang"); + map.put("ㄌㄥ", "leng"); + map.put("ㄌㄧ", "li"); map.put("ㄌㄧㄚ", "lia"); map.put("ㄌㄧㄝ", "lie"); map.put("ㄌㄧㄠ", "liao"); @@ -139,33 +155,13 @@ public class ZhuToPin { map.put("ㄌㄧㄣ", "lin"); map.put("ㄌㄧㄤ", "liang"); map.put("ㄌㄧㄥ", "ling"); + map.put("ㄌㄨ", "lu"); map.put("ㄌㄨㄛ", "luo"); map.put("ㄌㄨㄢ", "luan"); map.put("ㄌㄨㄣ", "lun"); - map.put("ㄌㄨㄥ", "lung"); + map.put("ㄌㄨㄥ", "long"); map.put("ㄌㄩ", "lv"); map.put("ㄌㄩㄝ", "lve"); - map.put("ㄌㄚ", "la"); - map.put("ㄌㄛ", "lo"); - map.put("ㄌㄜ", "le"); - map.put("ㄌㄞ", "lai"); - map.put("ㄌㄟ", "lei"); - map.put("ㄌㄠ", "lao"); - map.put("ㄌㄡ", "lou"); - map.put("ㄌㄢ", "lan"); - map.put("ㄌㄣ", "len"); - map.put("ㄌㄤ", "lang"); - map.put("ㄌㄥ", "leng"); - map.put("ㄌㄧ", "li"); - map.put("ㄌㄨ", "lu"); - map.put("ㄍㄨㄚ", "gua"); - map.put("ㄍㄨㄛ", "guo"); - map.put("ㄍㄨㄞ", "guai"); - map.put("ㄍㄨㄟ", "gui"); - map.put("ㄍㄨㄢ", "guan"); - map.put("ㄍㄨㄣ", "gun"); - map.put("ㄍㄨㄤ", "guang"); - map.put("ㄍㄨㄥ", "gong"); map.put("ㄍㄚ", "ga"); map.put("ㄍㄜ", "ge"); map.put("ㄍㄞ", "gai"); @@ -177,14 +173,14 @@ public class ZhuToPin { map.put("ㄍㄤ", "gang"); map.put("ㄍㄥ", "geng"); map.put("ㄍㄨ", "gu"); - map.put("ㄎㄨㄚ", "kua"); - map.put("ㄎㄨㄛ", "kuo"); - map.put("ㄎㄨㄞ", "kuai"); - map.put("ㄎㄨㄟ", "kui"); - map.put("ㄎㄨㄢ", "kuan"); - map.put("ㄎㄨㄣ", "kun"); - map.put("ㄎㄨㄤ", "kuang"); - map.put("ㄎㄨㄥ", "kong"); + map.put("ㄍㄨㄚ", "gua"); + map.put("ㄍㄨㄛ", "guo"); + map.put("ㄍㄨㄞ", "guai"); + map.put("ㄍㄨㄟ", "gui"); + map.put("ㄍㄨㄢ", "guan"); + map.put("ㄍㄨㄣ", "gun"); + map.put("ㄍㄨㄤ", "guang"); + map.put("ㄍㄨㄥ", "gong"); map.put("ㄎㄚ", "ka"); map.put("ㄎㄜ", "ke"); map.put("ㄎㄞ", "kai"); @@ -195,14 +191,14 @@ public class ZhuToPin { map.put("ㄎㄤ", "kang"); map.put("ㄎㄥ", "keng"); map.put("ㄎㄨ", "ku"); - map.put("ㄏㄨㄚ", "hua"); - map.put("ㄏㄨㄛ", "huo"); - map.put("ㄏㄨㄞ", "huai"); - map.put("ㄏㄨㄟ", "huai"); - map.put("ㄏㄨㄢ", "huan"); - map.put("ㄏㄨㄣ", "hun"); - map.put("ㄏㄨㄤ", "huang"); - map.put("ㄏㄨㄥ", "hong"); + map.put("ㄎㄨㄚ", "kua"); + map.put("ㄎㄨㄛ", "kuo"); + map.put("ㄎㄨㄞ", "kuai"); + map.put("ㄎㄨㄟ", "kui"); + map.put("ㄎㄨㄢ", "kuan"); + map.put("ㄎㄨㄣ", "kun"); + map.put("ㄎㄨㄤ", "kuang"); + map.put("ㄎㄨㄥ", "kong"); map.put("ㄏㄚ", "ha"); map.put("ㄏㄜ", "he"); map.put("ㄏㄞ", "hai"); @@ -214,6 +210,15 @@ public class ZhuToPin { map.put("ㄏㄤ", "hang"); map.put("ㄏㄥ", "heng"); map.put("ㄏㄨ", "hu"); + map.put("ㄏㄨㄚ", "hua"); + map.put("ㄏㄨㄛ", "huo"); + map.put("ㄏㄨㄞ", "huai"); + map.put("ㄏㄨㄟ", "hui"); + map.put("ㄏㄨㄢ", "huan"); + map.put("ㄏㄨㄣ", "hun"); + map.put("ㄏㄨㄤ", "huang"); + map.put("ㄏㄨㄥ", "hong"); + map.put("ㄐㄧ", "ji"); map.put("ㄐㄧㄚ", "jia"); map.put("ㄐㄧㄝ", "jie"); map.put("ㄐㄧㄠ", "jiao"); @@ -222,12 +227,12 @@ public class ZhuToPin { map.put("ㄐㄧㄣ", "jin"); map.put("ㄐㄧㄤ", "jiang"); map.put("ㄐㄧㄥ", "jing"); + map.put("ㄐㄩ", "ju"); map.put("ㄐㄩㄝ", "jue"); map.put("ㄐㄩㄢ", "juan"); map.put("ㄐㄩㄣ", "jun"); map.put("ㄐㄩㄥ", "jiong"); - map.put("ㄐㄧ", "ji"); - map.put("ㄐㄩ", "ju"); + map.put("ㄑㄧ", "qi"); map.put("ㄑㄧㄚ", "qia"); map.put("ㄑㄧㄝ", "qie"); map.put("ㄑㄧㄠ", "qiao"); @@ -236,12 +241,12 @@ public class ZhuToPin { map.put("ㄑㄧㄣ", "qin"); map.put("ㄑㄧㄤ", "qiang"); map.put("ㄑㄧㄥ", "qing"); + map.put("ㄑㄩ", "qu"); map.put("ㄑㄩㄝ", "que"); map.put("ㄑㄩㄢ", "quan"); map.put("ㄑㄩㄣ", "qun"); - map.put("ㄑㄩㄥ", "qun"); - map.put("ㄑㄧ", "qi"); - map.put("ㄑㄩ", "qu"); + map.put("ㄑㄩㄥ", "qiong"); + map.put("ㄒㄧ", "xi"); map.put("ㄒㄧㄚ", "xia"); map.put("ㄒㄧㄝ", "xie"); map.put("ㄒㄧㄠ", "xiao"); @@ -250,20 +255,12 @@ public class ZhuToPin { map.put("ㄒㄧㄣ", "xin"); map.put("ㄒㄧㄤ", "xiang"); map.put("ㄒㄧㄥ", "xing"); + map.put("ㄒㄩ", "xu"); map.put("ㄒㄩㄝ", "xue"); map.put("ㄒㄩㄢ", "xuan"); map.put("ㄒㄩㄣ", "xun"); map.put("ㄒㄩㄥ", "xiong"); - map.put("ㄒㄧ", "xi"); - map.put("ㄒㄩ", "xu"); - map.put("ㄓㄨㄚ", "zhua"); - map.put("ㄓㄨㄛ", "zhuo"); - map.put("ㄓㄨㄞ", "zhuai"); - map.put("ㄓㄨㄟ", "zhuo"); - map.put("ㄓㄨㄢ", "zhuan"); - map.put("ㄓㄨㄣ", "zhuan"); - map.put("ㄓㄨㄤ", "zhuan"); - map.put("ㄓㄨㄥ", "zhong"); + map.put("ㄓ", "zhi"); map.put("ㄓㄚ", "zha"); map.put("ㄓㄜ", "zhe"); map.put("ㄓㄞ", "zhai"); @@ -275,14 +272,15 @@ public class ZhuToPin { map.put("ㄓㄤ", "zhang"); map.put("ㄓㄥ", "zheng"); map.put("ㄓㄨ", "zhu"); - map.put("ㄔㄨㄚ", "chua"); - map.put("ㄔㄨㄛ", "chuo"); - map.put("ㄔㄨㄞ", "chuai"); - map.put("ㄔㄨㄟ", "chui"); - map.put("ㄔㄨㄢ", "chuan"); - map.put("ㄔㄨㄣ", "chun"); - map.put("ㄔㄨㄤ", "chuang"); - map.put("ㄔㄨㄥ", "chong"); + map.put("ㄓㄨㄚ", "zhua"); + map.put("ㄓㄨㄛ", "zhuo"); + map.put("ㄓㄨㄞ", "zhuai"); + map.put("ㄓㄨㄟ", "zhui"); + map.put("ㄓㄨㄢ", "zhuan"); + map.put("ㄓㄨㄣ", "zhun"); + map.put("ㄓㄨㄤ", "zhuang"); + map.put("ㄓㄨㄥ", "zhong"); + map.put("ㄔ", "chi"); map.put("ㄔㄚ", "cha"); map.put("ㄔㄜ", "che"); map.put("ㄔㄞ", "chai"); @@ -293,13 +291,15 @@ public class ZhuToPin { map.put("ㄔㄤ", "chang"); map.put("ㄔㄥ", "cheng"); map.put("ㄔㄨ", "chu"); - map.put("ㄕㄨㄚ", "shua"); - map.put("ㄕㄨㄛ", "shuo"); - map.put("ㄕㄨㄞ", "shuai"); - map.put("ㄕㄨㄟ", "shui"); - map.put("ㄕㄨㄢ", "shuan"); - map.put("ㄕㄨㄣ", "shun"); - map.put("ㄕㄨㄤ", "shuang"); + map.put("ㄔㄨㄚ", "chua"); + map.put("ㄔㄨㄛ", "chuo"); + map.put("ㄔㄨㄞ", "chuai"); + map.put("ㄔㄨㄟ", "chui"); + map.put("ㄔㄨㄢ", "chuan"); + map.put("ㄔㄨㄣ", "chun"); + map.put("ㄔㄨㄤ", "chuang"); + map.put("ㄔㄨㄥ", "chong"); + map.put("ㄕ", "shi"); map.put("ㄕㄚ", "sha"); map.put("ㄕㄜ", "she"); map.put("ㄕㄞ", "shai"); @@ -311,11 +311,14 @@ public class ZhuToPin { map.put("ㄕㄤ", "shang"); map.put("ㄕㄥ", "sheng"); map.put("ㄕㄨ", "shu"); - map.put("ㄖㄨㄛ", "ruo"); - map.put("ㄖㄨㄟ", "rui"); - map.put("ㄖㄨㄢ", "ruan"); - map.put("ㄖㄨㄣ", "run"); - map.put("ㄖㄨㄥ", "rung"); + map.put("ㄕㄨㄚ", "shua"); + map.put("ㄕㄨㄛ", "shuo"); + map.put("ㄕㄨㄞ", "shuai"); + map.put("ㄕㄨㄟ", "shui"); + map.put("ㄕㄨㄢ", "shuan"); + map.put("ㄕㄨㄣ", "shun"); + map.put("ㄕㄨㄤ", "shuang"); + map.put("ㄖ", "ri"); map.put("ㄖㄜ", "re"); map.put("ㄖㄠ", "rao"); map.put("ㄖㄡ", "rou"); @@ -324,11 +327,12 @@ public class ZhuToPin { map.put("ㄖㄤ", "rang"); map.put("ㄖㄥ", "reng"); map.put("ㄖㄨ", "ru"); - map.put("ㄗㄨㄛ", "zuo"); - map.put("ㄗㄨㄟ", "zui"); - map.put("ㄗㄨㄢ", "zuan"); - map.put("ㄗㄨㄣ", "zun"); - map.put("ㄗㄨㄥ", "zong"); + map.put("ㄖㄨㄛ", "ruo"); + map.put("ㄖㄨㄟ", "rui"); + map.put("ㄖㄨㄢ", "ruan"); + map.put("ㄖㄨㄣ", "run"); + map.put("ㄖㄨㄥ", "rong"); + map.put("ㄗ", "zi"); map.put("ㄗㄚ", "za"); map.put("ㄗㄜ", "ze"); map.put("ㄗㄞ", "zai"); @@ -340,11 +344,12 @@ public class ZhuToPin { map.put("ㄗㄤ", "zang"); map.put("ㄗㄥ", "zeng"); map.put("ㄗㄨ", "zu"); - map.put("ㄘㄨㄛ", "cuo"); - map.put("ㄘㄨㄟ", "cui"); - map.put("ㄘㄨㄢ", "cuan"); - map.put("ㄘㄨㄣ", "cun"); - map.put("ㄘㄨㄥ", "cong"); + map.put("ㄗㄨㄛ", "zuo"); + map.put("ㄗㄨㄟ", "zui"); + map.put("ㄗㄨㄢ", "zuan"); + map.put("ㄗㄨㄣ", "zun"); + map.put("ㄗㄨㄥ", "zong"); + map.put("ㄘ", "ci"); map.put("ㄘㄚ", "ca"); map.put("ㄘㄜ", "ce"); map.put("ㄘㄞ", "cai"); @@ -355,15 +360,15 @@ public class ZhuToPin { map.put("ㄘㄤ", "cang"); map.put("ㄘㄥ", "ceng"); map.put("ㄘㄨ", "cu"); - map.put("ㄙㄨㄛ", "suo"); - map.put("ㄙㄨㄟ", "sui"); - map.put("ㄙㄨㄢ", "suan"); - map.put("ㄙㄨㄣ", "sun"); - map.put("ㄙㄨㄥ", "song"); + map.put("ㄘㄨㄛ", "cuo"); + map.put("ㄘㄨㄟ", "cui"); + map.put("ㄘㄨㄢ", "cuan"); + map.put("ㄘㄨㄣ", "cun"); + map.put("ㄘㄨㄥ", "cong"); + map.put("ㄙ", "si"); map.put("ㄙㄚ", "sa"); map.put("ㄙㄜ", "se"); map.put("ㄙㄞ", "sai"); - map.put("ㄙㄟ", "sei"); map.put("ㄙㄠ", "sao"); map.put("ㄙㄡ", "sou"); map.put("ㄙㄢ", "san"); @@ -371,16 +376,22 @@ public class ZhuToPin { map.put("ㄙㄤ", "sang"); map.put("ㄙㄥ", "seng"); map.put("ㄙㄨ", "su"); + map.put("ㄙㄨㄛ", "suo"); + map.put("ㄙㄨㄟ", "sui"); + map.put("ㄙㄨㄢ", "suan"); + map.put("ㄙㄨㄣ", "sun"); + map.put("ㄙㄨㄥ", "song"); + map.put("ㄧ", "yi"); map.put("ㄧㄚ", "ya"); map.put("ㄧㄛ", "yo"); map.put("ㄧㄝ", "ye"); - map.put("ㄧㄞ", "yai"); map.put("ㄧㄠ", "yao"); map.put("ㄧㄡ", "you"); map.put("ㄧㄢ", "yan"); map.put("ㄧㄣ", "yin"); map.put("ㄧㄤ", "yang"); map.put("ㄧㄥ", "ying"); + map.put("ㄨ", "wu"); map.put("ㄨㄚ", "wa"); map.put("ㄨㄛ", "wo"); map.put("ㄨㄞ", "wai"); @@ -389,68 +400,37 @@ public class ZhuToPin { map.put("ㄨㄣ", "wen"); map.put("ㄨㄤ", "wang"); map.put("ㄨㄥ", "weng"); + map.put("ㄩ", "yu"); map.put("ㄩㄝ", "yue"); map.put("ㄩㄢ", "yuan"); map.put("ㄩㄣ", "yun"); map.put("ㄩㄥ", "yong"); - map.put("ㄅ", "b"); - map.put("ㄆ", "p"); - map.put("ㄇ", "m"); - map.put("ㄈ", "f"); - map.put("ㄉ", "d"); - map.put("ㄊ", "t"); - map.put("ㄋ", "n"); - map.put("ㄌ", "l"); - map.put("ㄍ", "g"); - map.put("ㄎ", "k"); - map.put("ㄏ", "h"); - map.put("ㄐ", "j"); - map.put("ㄑ", "q"); - map.put("ㄒ", "x"); - map.put("ㄓ", "zh"); - map.put("ㄔ", "ch"); - map.put("ㄕ", "sh"); - map.put("ㄖ", "r"); - map.put("ㄗ", "z"); - map.put("ㄘ", "c"); - map.put("ㄙ", "s"); - map.put("ㄧ", "yi"); - map.put("ㄨ", "wu"); - map.put("ㄩ", "yu"); - map.put("ㄚ", "a"); - map.put("ㄛ", "o"); - map.put("ㄜ", "e"); - map.put("ㄝ", "eh"); - map.put("ㄞ", "ai"); - map.put("ㄟ", "ei"); - map.put("ㄠ", "ao"); - map.put("ㄡ", "ou"); - map.put("ㄢ", "an"); - map.put("ㄣ", "en"); - map.put("ㄤ", "ang"); - map.put("ㄥ", "eng"); map.put("ㄦ", "er"); } public static String get(String text) { + if (TextUtils.isEmpty(text)) return ""; StringBuilder sb = new StringBuilder(); - String[] splits = text.split("↩"); - if (splits.length > 1) findSplit(sb, splits); - else findSingle(sb, text); - return sb.toString(); - } - - private static void findSplit(StringBuilder sb, String[] splits) { - for (String split : splits) { - String pinyin = map.get(split); - sb.append(pinyin != null ? pinyin : split); - } - } - - private static void findSingle(StringBuilder sb, String text) { - for (char chars : text.toCharArray()) { - String pinyin = map.get(String.valueOf(chars)); - sb.append(pinyin != null ? pinyin : chars); + int index = 0; + int length = text.length(); + while (index < length) { + boolean matched = false; + for (int len = MAX_ZHUYIN_LEN; len >= 1; len--) { + if (index + len <= length) { + String sub = text.substring(index, index + len); + if (map.containsKey(sub)) { + sb.append(map.get(sub)); + index += len; + matched = true; + break; + } + } + } + if (!matched) { + sb.append(text.charAt(index)); + index++; + } } + return sb.toString(); } -} +} \ No newline at end of file