我的C5地图只显示拼音.怎样才能变成汉字变成拼音 .求手机...

推荐这篇日记的豆列(转)汉字转拼音HanziToPinyin
来源:博客园
本文转载于: Android系统本身自带有有将汉字转化为英文拼音的类和方法。具体的类就是HanziToPinyin.java。Android系统自身实现的通讯录中就使用了HanziToPinyin.java对中文通讯录做分组整理。通过HanziToPinyin.java可以将汉字转化为拼音输出,在一些应用中非常必须,比如联系人的分组,假设一个人通讯录中存有若干姓张(ZHANG)的联系人,那么所有姓张的联系人按理都应该分组在“Z”组下。又比如微信、QQ等等此类社交类APP,凡是涉及到联系人、好友分组排序的应用场景,则均需要将汉字转化为拼音然后依据首字母排序归类。HanziToPinyin.java不是一个公开的类,只是谷歌官方内部在实现Android通讯录中私有使用的一个类,我们不能够直接像使用普通Android SDK API一样使用,但这没关系,我们完全可以将这个类文件拷贝出来,放到我们自己的项目中,直接使用。HanziToPinyin.java的代码文件,谷歌官方的通讯录APP下: packages/providers/ContactsProvider /src/com/android/providers/contacts/HanziToPinyin.java 网上也有这个HanziToPinyin.java类文件的项目地址。但是,直接使用这个 类不能正常工作,错误原因是: "There is no Chinese collator, HanziToPinyin is disabled" 发生这一错误的代码块是在HanziToPinyin.java的方法:public static HanziToPinyin getInstance();具体原因是这个方法在一些非原生定制的Android系统中,对中文Locale的定义规则不同,导致原代码文件中的locale[i].equals(Locale.CHINA)返回false,不能识别,致使以后的代码全部失去功效。 对此问题的修复(解决方案) 我改进了判断条件,增加一些代码:final Locale chinaAddition = new Locale("zh");将此chinaAddition作为辅助条件也加入到条件判断中, 1 if ( locale[i].equals(Locale.CHINA) ||
locale[i].equals(chinaAddition) ){ 2 … 3 } 下面是我改进后的getInstance()方法全部代码: 1 public static HanziToPinyin getInstance() { 2
synchronized (HanziToPinyin.class) { 3
if (sInstance != null) { 4
return sI 5
// Check if zh_CN collation data is available 7
final Locale locale[] = Collator.getAvailableLocales(); 8 9
// 增加的代码,增强。 10
final Locale chinaAddition = new Locale("zh"); 11 12
for (int i = 0; i & locale. i++) { 13
if (locale[i].equals(Locale.CHINA) 14
|| locale[i].equals(chinaAddition)) { 15
// Do self validation just once. 16
if (DEBUG) { 17
Log.d(TAG, "Self validation. Result: " 18
+ doSelfValidation()); 19
sInstance = new HanziToPinyin(true); 21
return sI 22
Log.w(TAG, 25
"There is no Chinese collator, HanziToPinyin is disabled"); 26
sInstance = new HanziToPinyin(false); 27
return sI 28
} 经由改进增强,HanziToPinyin.java的全部源代码如下(代码可以复制到自己的项目中直接使用):
* Copyright (C) 2011 The Android Open Source Project
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software 11
* distributed under the License is distributed on an "AS IS" BASIS, 12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13
* See the License for the specific language governing permissions and 14
* limitations under the License. 15
*/ 16 17 package zhangphil. 18 19 import android.text.TextU 20 import android.util.L 21 22 import java.text.C 23 import java.util.ArrayL 24 import java.util.L 25 26 /** 27
* An object to convert Chinese character to its corresponding pinyin string. 28
* For characters with multiple possible pinyin string, only one is selected 29
* according to collator. Polyphone is not supported in this implementation. 30
* This class is implemented to achieve the best runtime performance and minimum 31
* runtime resources with tolerable sacrifice of accuracy. This implementation 32
* highly depends on zh_CN ICU collation data and must be always synchronized 33
* with ICU. 34
* Currently this file is aligned to zh.txt in ICU 4.6 ?ヨ?android4.2婧?? 36
*/ 37 public class HanziToPinyin { 38
private static final String TAG = "HanziToPinyin"; 39 40
// Turn on this flag when we want to check internal data structure. 41
private static final boolean DEBUG = 42 43
/** 44
* Unihans array. 45
* Each unihans is the first one within same pinyin when collator is zh_CN. 47
*/ 48
public static final char[] UNIHANS = { '\u963f', '\u54ce', '\u5b89', 49
'\u80ae', '\u51f9', '\u516b', '\u6300', '\u6273', '\u90a6', 50
'\u52f9', '\u9642', '\u5954', '\u4f3b', '\u5c44', '\u8fb9', 51
'\u706c', '\u618b', '\u6c43', '\u51ab', '\u7676', '\u5cec', 52
'\u5693', '\u5072', '\u53c2', '\u4ed3', '\u64a1', '\u518a', 53
'\u5d7e', '\u66fd', '\u66fe', '\u5c64', '\u53c9', '\u8286', 54
'\u8fbf', '\u4f25', '\u6284', '\u8f66', '\u62bb', '\u6c88', 55
'\u6c89', '\u9637', '\u5403', '\u5145', '\u62bd', '\u51fa', 56
'\u6b3b', '\u63e3', '\u5ddb', '\u5205', '\u5439', '\u65fe', 57
'\u9034', '\u5472', '\u5306', '\u51d1', '\u7c97', '\u6c46', 58
'\u5d14', '\u90a8', '\u6413', '\u5491', '\u5446', '\u4e39', 59
'\u5f53', '\u5200', '\u561a', '\u6265', '\u706f', '\u6c10', 60
'\u55f2', '\u7538', '\u5201', '\u7239', '\u4e01', '\u4e1f', 61
'\u4e1c', '\u543a', '\u53be', '\u8011', '\u8968', '\u5428', 62
'\u591a', '\u59b8', '\u8bf6', '\u5940', '\u97a5', '\u513f', 63
'\u53d1', '\u5e06', '\u531a', '\u98de', '\u5206', '\u4e30', 64
'\u8985', '\u4ecf', '\u7d11', '\u4f15', '\u65ee', '\u4f85', 65
'\u7518', '\u5188', '\u768b', '\u6208', '\u7ed9', '\u6839', 66
'\u522f', '\u5de5', '\u52fe', '\u4f30', '\u74dc', '\u4e56', 67
'\u5173', '\u5149', '\u5f52', '\u4e28', '\u5459', '\u54c8', 68
'\u548d', '\u4f44', '\u592f', '\u8320', '\u8bc3', '\u9ed2', 69
'\u62eb', '\u4ea8', '\u5677', '\u53ff', '\u9f41', '\u4e6f', 70
'\u82b1', '\u6000', '\u72bf', '\u5ddf', '\u7070', '\u660f', 71
'\u5419', '\u4e0c', '\u52a0', '\u620b', '\u6c5f', '\u827d', 72
'\u9636', '\u5dfe', '\u5755', '\u5182', '\u4e29', '\u51e5', 73
'\u59e2', '\u5658', '\u519b', '\u5494', '\u5f00', '\u520a', 74
'\u5ffc', '\u5c3b', '\u533c', '\u808e', '\u52a5', '\u7a7a', 75
'\u62a0', '\u625d', '\u5938', '\u84af', '\u5bbd', '\u5321', 76
'\u4e8f', '\u5764', '\u6269', '\u5783', '\u6765', '\u5170', 77
'\u5577', '\u635e', '\u808b', '\u52d2', '\u5d1a', '\u5215', 78
'\u4fe9', '\u5941', '\u826f', '\u64a9', '\u5217', '\u62ce', 79
'\u5222', '\u6e9c', '\u56d6', '\u9f99', '\u779c', '\u565c', 80
'\u5a08', '\u7567', '\u62a1', '\u7f57', '\u5463', '\u5988', 81
'\u57cb', '\u5ada', '\u7264', '\u732b', '\u4e48', '\u5445', 82
'\u95e8', '\u753f', '\u54aa', '\u5b80', '\u55b5', '\u4e5c', 83
'\u6c11', '\u540d', '\u8c2c', '\u6478', '\u54de', '\u6bea', 84
'\u55ef', '\u62cf', '\u8149', '\u56e1', '\u56d4', '\u5b6c', 85
'\u7592', '\u5a1e', '\u6041', '\u80fd', '\u59ae', '\u62c8', 86
'\u5b22', '\u9e1f', '\u634f', '\u56dc', '\u5b81', '\u599e', 87
'\u519c', '\u7fba', '\u5974', '\u597b', '\u759f', '\u9ec1', 88
'\u90cd', '\u5594', '\u8bb4', '\u5991', '\u62cd', '\u7705', 89
'\u4e53', '\u629b', '\u5478', '\u55b7', '\u5309', '\u4e15', 90
'\u56e8', '\u527d', '\u6c15', '\u59d8', '\u4e52', '\u948b', 91
'\u5256', '\u4ec6', '\u4e03', '\u6390', '\u5343', '\u545b', 92
'\u6084', '\u767f', '\u4eb2', '\u72c5', '\u828e', '\u4e18', 93
'\u533a', '\u5cd1', '\u7f3a', '\u590b', '\u5465', '\u7a63', 94
'\u5a06', '\u60f9', '\u4eba', '\u6254', '\u65e5', '\u8338', 95
'\u53b9', '\u909a', '\u633c', '\u5827', '\u5a51', '\u77a4', 96
'\u637c', '\u4ee8', '\u6be2', '\u4e09', '\u6852', '\u63bb', 97
'\u95aa', '\u68ee', '\u50e7', '\u6740', '\u7b5b', '\u5c71', 98
'\u4f24', '\u5f30', '\u5962', '\u7533', '\u8398', '\u6552', 99
'\u5347', '\u5c38', '\u53ce', '\u4e66', '\u5237', '\u8870', 100
'\u95e9', '\u53cc', '\u8c01', '\u542e', '\u8bf4', '\u53b6', 101
'\u5fea', '\u635c', '\u82cf', '\u72fb', '\u590a', '\u5b59', 102
'\u5506', '\u4ed6', '\u56fc', '\u574d', '\u6c64', '\u5932', 103
'\u5fd1', '\u71a5', '\u5254', '\u5929', '\u65eb', '\u5e16', 104
'\u5385', '\u56f2', '\u5077', '\u51f8', '\u6e4d', '\u63a8', 105
'\u541e', '\u4e47', '\u7a75', '\u6b6a', '\u5f2f', '\u5c23', 106
'\u5371', '\u6637', '\u7fc1', '\u631d', '\u4e4c', '\u5915', 107
'\u8672', '\u4eda', '\u4e61', '\u7071', '\u4e9b', '\u5fc3', 108
'\u661f', '\u51f6', '\u4f11', '\u5401', '\u5405', '\u524a', 109
'\u5743', '\u4e2b', '\u6079', '\u592e', '\u5e7a', '\u503b', 110
'\u4e00', '\u56d9', '\u5e94', '\u54df', '\u4f63', '\u4f18', 111
'\u625c', '\u56e6', '\u66f0', '\u6655', '\u7b60', '\u7b7c', 112
'\u5e00', '\u707d', '\u5142', '\u5328', '\u50ae', '\u5219', 113
'\u8d3c', '\u600e', '\u5897', '\u624e', '\u635a', '\u6cbe', 114
'\u5f20', '\u957f', '\u9577', '\u4f4b', '\u8707', '\u8d1e', 115
'\u4e89', '\u4e4b', '\u5cd9', '\u5ea2', '\u4e2d', '\u5dde', 116
'\u6731', '\u6293', '\u62fd', '\u4e13', '\u5986', '\u96b9', 117
'\u5b92', '\u5353', '\u4e72', '\u5b97', '\u90b9', '\u79df', 118
'\u94bb', '\u539c', '\u5c0a', '\u6628', '\u5159', '\u9fc3', 119
'\u9fc4', }; 120 121
/** 122
* Pinyin array. 123
* Each pinyin is corresponding to unihans of same offset in the unihans 125
* array. 126
*/ 127
public static final byte[][] PINYINS = { { 65, 0, 0, 0, 0, 0 }, 128
{ 65, 73, 0, 0, 0, 0 }, { 65, 78, 0, 0, 0, 0 }, 129
{ 65, 78, 71, 0, 0, 0 }, { 65, 79, 0, 0, 0, 0 }, 130
{ 66, 65, 0, 0, 0, 0 }, { 66, 65, 73, 0, 0, 0 }, 131
{ 66, 65, 78, 0, 0, 0 }, { 66, 65, 78, 71, 0, 0 }, 132
{ 66, 65, 79, 0, 0, 0 }, { 66, 69, 73, 0, 0, 0 }, 133
{ 66, 69, 78, 0, 0, 0 }, { 66, 69, 78, 71, 0, 0 }, 134
{ 66, 73, 0, 0, 0, 0 }, { 66, 73, 65, 78, 0, 0 }, 135
{ 66, 73, 65, 79, 0, 0 }, { 66, 73, 69, 0, 0, 0 }, 136
{ 66, 73, 78, 0, 0, 0 }, { 66, 73, 78, 71, 0, 0 }, 137
{ 66, 79, 0, 0, 0, 0 }, { 66, 85, 0, 0, 0, 0 }, 138
{ 67, 65, 0, 0, 0, 0 }, { 67, 65, 73, 0, 0, 0 }, 139
{ 67, 65, 78, 0, 0, 0 }, { 67, 65, 78, 71, 0, 0 }, 140
{ 67, 65, 79, 0, 0, 0 }, { 67, 69, 0, 0, 0, 0 }, 141
{ 67, 69, 78, 0, 0, 0 }, { 67, 69, 78, 71, 0, 0 }, 142
{ 90, 69, 78, 71, 0, 0 }, { 67, 69, 78, 71, 0, 0 }, 143
{ 67, 72, 65, 0, 0, 0 }, { 67, 72, 65, 73, 0, 0 }, 144
{ 67, 72, 65, 78, 0, 0 }, { 67, 72, 65, 78, 71, 0 }, 145
{ 67, 72, 65, 79, 0, 0 }, { 67, 72, 69, 0, 0, 0 }, 146
{ 67, 72, 69, 78, 0, 0 }, { 83, 72, 69, 78, 0, 0 }, 147
{ 67, 72, 69, 78, 0, 0 }, { 67, 72, 69, 78, 71, 0 }, 148
{ 67, 72, 73, 0, 0, 0 }, { 67, 72, 79, 78, 71, 0 }, 149
{ 67, 72, 79, 85, 0, 0 }, { 67, 72, 85, 0, 0, 0 }, 150
{ 67, 72, 85, 65, 0, 0 }, { 67, 72, 85, 65, 73, 0 }, 151
{ 67, 72, 85, 65, 78, 0 }, { 67, 72, 85, 65, 78, 71 }, 152
{ 67, 72, 85, 73, 0, 0 }, { 67, 72, 85, 78, 0, 0 }, 153
{ 67, 72, 85, 79, 0, 0 }, { 67, 73, 0, 0, 0, 0 }, 154
{ 67, 79, 78, 71, 0, 0 }, { 67, 79, 85, 0, 0, 0 }, 155
{ 67, 85, 0, 0, 0, 0 }, { 67, 85, 65, 78, 0, 0 }, 156
{ 67, 85, 73, 0, 0, 0 }, { 67, 85, 78, 0, 0, 0 }, 157
{ 67, 85, 79, 0, 0, 0 }, { 68, 65, 0, 0, 0, 0 }, 158
{ 68, 65, 73, 0, 0, 0 }, { 68, 65, 78, 0, 0, 0 }, 159
{ 68, 65, 78, 71, 0, 0 }, { 68, 65, 79, 0, 0, 0 }, 160
{ 68, 69, 0, 0, 0, 0 }, { 68, 69, 78, 0, 0, 0 }, 161
{ 68, 69, 78, 71, 0, 0 }, { 68, 73, 0, 0, 0, 0 }, 162
{ 68, 73, 65, 0, 0, 0 }, { 68, 73, 65, 78, 0, 0 }, 163
{ 68, 73, 65, 79, 0, 0 }, { 68, 73, 69, 0, 0, 0 }, 164
{ 68, 73, 78, 71, 0, 0 }, { 68, 73, 85, 0, 0, 0 }, 165
{ 68, 79, 78, 71, 0, 0 }, { 68, 79, 85, 0, 0, 0 }, 166
{ 68, 85, 0, 0, 0, 0 }, { 68, 85, 65, 78, 0, 0 }, 167
{ 68, 85, 73, 0, 0, 0 }, { 68, 85, 78, 0, 0, 0 }, 168
{ 68, 85, 79, 0, 0, 0 }, { 69, 0, 0, 0, 0, 0 }, 169
{ 69, 73, 0, 0, 0, 0 }, { 69, 78, 0, 0, 0, 0 }, 170
{ 69, 78, 71, 0, 0, 0 }, { 69, 82, 0, 0, 0, 0 }, 171
{ 70, 65, 0, 0, 0, 0 }, { 70, 65, 78, 0, 0, 0 }, 172
{ 70, 65, 78, 71, 0, 0 }, { 70, 69, 73, 0, 0, 0 }, 173
{ 70, 69, 78, 0, 0, 0 }, { 70, 69, 78, 71, 0, 0 }, 174
{ 70, 73, 65, 79, 0, 0 }, { 70, 79, 0, 0, 0, 0 }, 175
{ 70, 79, 85, 0, 0, 0 }, { 70, 85, 0, 0, 0, 0 }, 176
{ 71, 65, 0, 0, 0, 0 }, { 71, 65, 73, 0, 0, 0 }, 177
{ 71, 65, 78, 0, 0, 0 }, { 71, 65, 78, 71, 0, 0 }, 178
{ 71, 65, 79, 0, 0, 0 }, { 71, 69, 0, 0, 0, 0 }, 179
{ 71, 69, 73, 0, 0, 0 }, { 71, 69, 78, 0, 0, 0 }, 180
{ 71, 69, 78, 71, 0, 0 }, { 71, 79, 78, 71, 0, 0 }, 181
{ 71, 79, 85, 0, 0, 0 }, { 71, 85, 0, 0, 0, 0 }, 182
{ 71, 85, 65, 0, 0, 0 }, { 71, 85, 65, 73, 0, 0 }, 183
{ 71, 85, 65, 78, 0, 0 }, { 71, 85, 65, 78, 71, 0 }, 184
{ 71, 85, 73, 0, 0, 0 }, { 71, 85, 78, 0, 0, 0 }, 185
{ 71, 85, 79, 0, 0, 0 }, { 72, 65, 0, 0, 0, 0 }, 186
{ 72, 65, 73, 0, 0, 0 }, { 72, 65, 78, 0, 0, 0 }, 187
{ 72, 65, 78, 71, 0, 0 }, { 72, 65, 79, 0, 0, 0 }, 188
{ 72, 69, 0, 0, 0, 0 }, { 72, 69, 73, 0, 0, 0 }, 189
{ 72, 69, 78, 0, 0, 0 }, { 72, 69, 78, 71, 0, 0 }, 190
{ 72, 77, 0, 0, 0, 0 }, { 72, 79, 78, 71, 0, 0 }, 191
{ 72, 79, 85, 0, 0, 0 }, { 72, 85, 0, 0, 0, 0 }, 192
{ 72, 85, 65, 0, 0, 0 }, { 72, 85, 65, 73, 0, 0 }, 193
{ 72, 85, 65, 78, 0, 0 }, { 72, 85, 65, 78, 71, 0 }, 194
{ 72, 85, 73, 0, 0, 0 }, { 72, 85, 78, 0, 0, 0 }, 195
{ 72, 85, 79, 0, 0, 0 }, { 74, 73, 0, 0, 0, 0 }, 196
{ 74, 73, 65, 0, 0, 0 }, { 74, 73, 65, 78, 0, 0 }, 197
{ 74, 73, 65, 78, 71, 0 }, { 74, 73, 65, 79, 0, 0 }, 198
{ 74, 73, 69, 0, 0, 0 }, { 74, 73, 78, 0, 0, 0 }, 199
{ 74, 73, 78, 71, 0, 0 }, { 74, 73, 79, 78, 71, 0 }, 200
{ 74, 73, 85, 0, 0, 0 }, { 74, 85, 0, 0, 0, 0 }, 201
{ 74, 85, 65, 78, 0, 0 }, { 74, 85, 69, 0, 0, 0 }, 202
{ 74, 85, 78, 0, 0, 0 }, { 75, 65, 0, 0, 0, 0 }, 203
{ 75, 65, 73, 0, 0, 0 }, { 75, 65, 78, 0, 0, 0 }, 204
{ 75, 65, 78, 71, 0, 0 }, { 75, 65, 79, 0, 0, 0 }, 205
{ 75, 69, 0, 0, 0, 0 }, { 75, 69, 78, 0, 0, 0 }, 206
{ 75, 69, 78, 71, 0, 0 }, { 75, 79, 78, 71, 0, 0 }, 207
{ 75, 79, 85, 0, 0, 0 }, { 75, 85, 0, 0, 0, 0 }, 208
{ 75, 85, 65, 0, 0, 0 }, { 75, 85, 65, 73, 0, 0 }, 209
{ 75, 85, 65, 78, 0, 0 }, { 75, 85, 65, 78, 71, 0 }, 210
{ 75, 85, 73, 0, 0, 0 }, { 75, 85, 78, 0, 0, 0 }, 211
{ 75, 85, 79, 0, 0, 0 }, { 76, 65, 0, 0, 0, 0 }, 212
{ 76, 65, 73, 0, 0, 0 }, { 76, 65, 78, 0, 0, 0 }, 213
{ 76, 65, 78, 71, 0, 0 }, { 76, 65, 79, 0, 0, 0 }, 214
{ 76, 69, 0, 0, 0, 0 }, { 76, 69, 73, 0, 0, 0 }, 215
{ 76, 69, 78, 71, 0, 0 }, { 76, 73, 0, 0, 0, 0 }, 216
{ 76, 73, 65, 0, 0, 0 }, { 76, 73, 65, 78, 0, 0 }, 217
{ 76, 73, 65, 78, 71, 0 }, { 76, 73, 65, 79, 0, 0 }, 218
{ 76, 73, 69, 0, 0, 0 }, { 76, 73, 78, 0, 0, 0 }, 219
{ 76, 73, 78, 71, 0, 0 }, { 76, 73, 85, 0, 0, 0 }, 220
{ 76, 79, 0, 0, 0, 0 }, { 76, 79, 78, 71, 0, 0 }, 221
{ 76, 79, 85, 0, 0, 0 }, { 76, 85, 0, 0, 0, 0 }, 222
{ 76, 85, 65, 78, 0, 0 }, { 76, 85, 69, 0, 0, 0 }, 223
{ 76, 85, 78, 0, 0, 0 }, { 76, 85, 79, 0, 0, 0 }, 224
{ 77, 0, 0, 0, 0, 0 }, { 77, 65, 0, 0, 0, 0 }, 225
{ 77, 65, 73, 0, 0, 0 }, { 77, 65, 78, 0, 0, 0 }, 226
{ 77, 65, 78, 71, 0, 0 }, { 77, 65, 79, 0, 0, 0 }, 227
{ 77, 69, 0, 0, 0, 0 }, { 77, 69, 73, 0, 0, 0 }, 228
{ 77, 69, 78, 0, 0, 0 }, { 77, 69, 78, 71, 0, 0 }, 229
{ 77, 73, 0, 0, 0, 0 }, { 77, 73, 65, 78, 0, 0 }, 230
{ 77, 73, 65, 79, 0, 0 }, { 77, 73, 69, 0, 0, 0 }, 231
{ 77, 73, 78, 0, 0, 0 }, { 77, 73, 78, 71, 0, 0 }, 232
{ 77, 73, 85, 0, 0, 0 }, { 77, 79, 0, 0, 0, 0 }, 233
{ 77, 79, 85, 0, 0, 0 }, { 77, 85, 0, 0, 0, 0 }, 234
{ 78, 0, 0, 0, 0, 0 }, { 78, 65, 0, 0, 0, 0 }, 235
{ 78, 65, 73, 0, 0, 0 }, { 78, 65, 78, 0, 0, 0 }, 236
{ 78, 65, 78, 71, 0, 0 }, { 78, 65, 79, 0, 0, 0 }, 237
{ 78, 69, 0, 0, 0, 0 }, { 78, 69, 73, 0, 0, 0 }, 238
{ 78, 69, 78, 0, 0, 0 }, { 78, 69, 78, 71, 0, 0 }, 239
{ 78, 73, 0, 0, 0, 0 }, { 78, 73, 65, 78, 0, 0 }, 240
{ 78, 73, 65, 78, 71, 0 }, { 78, 73, 65, 79, 0, 0 }, 241
{ 78, 73, 69, 0, 0, 0 }, { 78, 73, 78, 0, 0, 0 }, 242
{ 78, 73, 78, 71, 0, 0 }, { 78, 73, 85, 0, 0, 0 }, 243
{ 78, 79, 78, 71, 0, 0 }, { 78, 79, 85, 0, 0, 0 }, 244
{ 78, 85, 0, 0, 0, 0 }, { 78, 85, 65, 78, 0, 0 }, 245
{ 78, 85, 69, 0, 0, 0 }, { 78, 85, 78, 0, 0, 0 }, 246
{ 78, 85, 79, 0, 0, 0 }, { 79, 0, 0, 0, 0, 0 }, 247
{ 79, 85, 0, 0, 0, 0 }, { 80, 65, 0, 0, 0, 0 }, 248
{ 80, 65, 73, 0, 0, 0 }, { 80, 65, 78, 0, 0, 0 }, 249
{ 80, 65, 78, 71, 0, 0 }, { 80, 65, 79, 0, 0, 0 }, 250
{ 80, 69, 73, 0, 0, 0 }, { 80, 69, 78, 0, 0, 0 }, 251
{ 80, 69, 78, 71, 0, 0 }, { 80, 73, 0, 0, 0, 0 }, 252
{ 80, 73, 65, 78, 0, 0 }, { 80, 73, 65, 79, 0, 0 }, 253
{ 80, 73, 69, 0, 0, 0 }, { 80, 73, 78, 0, 0, 0 }, 254
{ 80, 73, 78, 71, 0, 0 }, { 80, 79, 0, 0, 0, 0 }, 255
{ 80, 79, 85, 0, 0, 0 }, { 80, 85, 0, 0, 0, 0 }, 256
{ 81, 73, 0, 0, 0, 0 }, { 81, 73, 65, 0, 0, 0 }, 257
{ 81, 73, 65, 78, 0, 0 }, { 81, 73, 65, 78, 71, 0 }, 258
{ 81, 73, 65, 79, 0, 0 }, { 81, 73, 69, 0, 0, 0 }, 259
{ 81, 73, 78, 0, 0, 0 }, { 81, 73, 78, 71, 0, 0 }, 260
{ 81, 73, 79, 78, 71, 0 }, { 81, 73, 85, 0, 0, 0 }, 261
{ 81, 85, 0, 0, 0, 0 }, { 81, 85, 65, 78, 0, 0 }, 262
{ 81, 85, 69, 0, 0, 0 }, { 81, 85, 78, 0, 0, 0 }, 263
{ 82, 65, 78, 0, 0, 0 }, { 82, 65, 78, 71, 0, 0 }, 264
{ 82, 65, 79, 0, 0, 0 }, { 82, 69, 0, 0, 0, 0 }, 265
{ 82, 69, 78, 0, 0, 0 }, { 82, 69, 78, 71, 0, 0 }, 266
{ 82, 73, 0, 0, 0, 0 }, { 82, 79, 78, 71, 0, 0 }, 267
{ 82, 79, 85, 0, 0, 0 }, { 82, 85, 0, 0, 0, 0 }, 268
{ 82, 85, 65, 0, 0, 0 }, { 82, 85, 65, 78, 0, 0 }, 269
{ 82, 85, 73, 0, 0, 0 }, { 82, 85, 78, 0, 0, 0 }, 270
{ 82, 85, 79, 0, 0, 0 }, { 83, 65, 0, 0, 0, 0 }, 271
{ 83, 65, 73, 0, 0, 0 }, { 83, 65, 78, 0, 0, 0 }, 272
{ 83, 65, 78, 71, 0, 0 }, { 83, 65, 79, 0, 0, 0 }, 273
{ 83, 69, 0, 0, 0, 0 }, { 83, 69, 78, 0, 0, 0 }, 274
{ 83, 69, 78, 71, 0, 0 }, { 83, 72, 65, 0, 0, 0 }, 275
{ 83, 72, 65, 73, 0, 0 }, { 83, 72, 65, 78, 0, 0 }, 276
{ 83, 72, 65, 78, 71, 0 }, { 83, 72, 65, 79, 0, 0 }, 277
{ 83, 72, 69, 0, 0, 0 }, { 83, 72, 69, 78, 0, 0 }, 278
{ 88, 73, 78, 0, 0, 0 }, { 83, 72, 69, 78, 0, 0 }, 279
{ 83, 72, 69, 78, 71, 0 }, { 83, 72, 73, 0, 0, 0 }, 280
{ 83, 72, 79, 85, 0, 0 }, { 83, 72, 85, 0, 0, 0 }, 281
{ 83, 72, 85, 65, 0, 0 }, { 83, 72, 85, 65, 73, 0 }, 282
{ 83, 72, 85, 65, 78, 0 }, { 83, 72, 85, 65, 78, 71 }, 283
{ 83, 72, 85, 73, 0, 0 }, { 83, 72, 85, 78, 0, 0 }, 284
{ 83, 72, 85, 79, 0, 0 }, { 83, 73, 0, 0, 0, 0 }, 285
{ 83, 79, 78, 71, 0, 0 }, { 83, 79, 85, 0, 0, 0 }, 286
{ 83, 85, 0, 0, 0, 0 }, { 83, 85, 65, 78, 0, 0 }, 287
{ 83, 85, 73, 0, 0, 0 }, { 83, 85, 78, 0, 0, 0 }, 288
{ 83, 85, 79, 0, 0, 0 }, { 84, 65, 0, 0, 0, 0 }, 289
{ 84, 65, 73, 0, 0, 0 }, { 84, 65, 78, 0, 0, 0 }, 290
{ 84, 65, 78, 71, 0, 0 }, { 84, 65, 79, 0, 0, 0 }, 291
{ 84, 69, 0, 0, 0, 0 }, { 84, 69, 78, 71, 0, 0 }, 292
{ 84, 73, 0, 0, 0, 0 }, { 84, 73, 65, 78, 0, 0 }, 293
{ 84, 73, 65, 79, 0, 0 }, { 84, 73, 69, 0, 0, 0 }, 294
{ 84, 73, 78, 71, 0, 0 }, { 84, 79, 78, 71, 0, 0 }, 295
{ 84, 79, 85, 0, 0, 0 }, { 84, 85, 0, 0, 0, 0 }, 296
{ 84, 85, 65, 78, 0, 0 }, { 84, 85, 73, 0, 0, 0 }, 297
{ 84, 85, 78, 0, 0, 0 }, { 84, 85, 79, 0, 0, 0 }, 298
{ 87, 65, 0, 0, 0, 0 }, { 87, 65, 73, 0, 0, 0 }, 299
{ 87, 65, 78, 0, 0, 0 }, { 87, 65, 78, 71, 0, 0 }, 300
{ 87, 69, 73, 0, 0, 0 }, { 87, 69, 78, 0, 0, 0 }, 301
{ 87, 69, 78, 71, 0, 0 }, { 87, 79, 0, 0, 0, 0 }, 302
{ 87, 85, 0, 0, 0, 0 }, { 88, 73, 0, 0, 0, 0 }, 303
{ 88, 73, 65, 0, 0, 0 }, { 88, 73, 65, 78, 0, 0 }, 304
{ 88, 73, 65, 78, 71, 0 }, { 88, 73, 65, 79, 0, 0 }, 305
{ 88, 73, 69, 0, 0, 0 }, { 88, 73, 78, 0, 0, 0 }, 306
{ 88, 73, 78, 71, 0, 0 }, { 88, 73, 79, 78, 71, 0 }, 307
{ 88, 73, 85, 0, 0, 0 }, { 88, 85, 0, 0, 0, 0 }, 308
{ 88, 85, 65, 78, 0, 0 }, { 88, 85, 69, 0, 0, 0 }, 309
{ 88, 85, 78, 0, 0, 0 }, { 89, 65, 0, 0, 0, 0 }, 310
{ 89, 65, 78, 0, 0, 0 }, { 89, 65, 78, 71, 0, 0 }, 311
{ 89, 65, 79, 0, 0, 0 }, { 89, 69, 0, 0, 0, 0 }, 312
{ 89, 73, 0, 0, 0, 0 }, { 89, 73, 78, 0, 0, 0 }, 313
{ 89, 73, 78, 71, 0, 0 }, { 89, 79, 0, 0, 0, 0 }, 314
{ 89, 79, 78, 71, 0, 0 }, { 89, 79, 85, 0, 0, 0 }, 315
{ 89, 85, 0, 0, 0, 0 }, { 89, 85, 65, 78, 0, 0 }, 316
{ 89, 85, 69, 0, 0, 0 }, { 89, 85, 78, 0, 0, 0 }, 317
{ 74, 85, 78, 0, 0, 0 }, { 89, 85, 78, 0, 0, 0 }, 318
{ 90, 65, 0, 0, 0, 0 }, { 90, 65, 73, 0, 0, 0 }, 319
{ 90, 65, 78, 0, 0, 0 }, { 90, 65, 78, 71, 0, 0 }, 320
{ 90, 65, 79, 0, 0, 0 }, { 90, 69, 0, 0, 0, 0 }, 321
{ 90, 69, 73, 0, 0, 0 }, { 90, 69, 78, 0, 0, 0 }, 322
{ 90, 69, 78, 71, 0, 0 }, { 90, 72, 65, 0, 0, 0 }, 323
{ 90, 72, 65, 73, 0, 0 }, { 90, 72, 65, 78, 0, 0 }, 324
{ 90, 72, 65, 78, 71, 0 }, { 67, 72, 65, 78, 71, 0 }, 325
{ 90, 72, 65, 78, 71, 0 }, { 90, 72, 65, 79, 0, 0 }, 326
{ 90, 72, 69, 0, 0, 0 }, { 90, 72, 69, 78, 0, 0 }, 327
{ 90, 72, 69, 78, 71, 0 }, { 90, 72, 73, 0, 0, 0 }, 328
{ 83, 72, 73, 0, 0, 0 }, { 90, 72, 73, 0, 0, 0 }, 329
{ 90, 72, 79, 78, 71, 0 }, { 90, 72, 79, 85, 0, 0 }, 330
{ 90, 72, 85, 0, 0, 0 }, { 90, 72, 85, 65, 0, 0 }, 331
{ 90, 72, 85, 65, 73, 0 }, { 90, 72, 85, 65, 78, 0 }, 332
{ 90, 72, 85, 65, 78, 71 }, { 90, 72, 85, 73, 0, 0 }, 333
{ 90, 72, 85, 78, 0, 0 }, { 90, 72, 85, 79, 0, 0 }, 334
{ 90, 73, 0, 0, 0, 0 }, { 90, 79, 78, 71, 0, 0 }, 335
{ 90, 79, 85, 0, 0, 0 }, { 90, 85, 0, 0, 0, 0 }, 336
{ 90, 85, 65, 78, 0, 0 }, { 90, 85, 73, 0, 0, 0 }, 337
{ 90, 85, 78, 0, 0, 0 }, { 90, 85, 79, 0, 0, 0 }, 338
{ 0, 0, 0, 0, 0, 0 }, { 83, 72, 65, 78, 0, 0 }, 339
{ 0, 0, 0, 0, 0, 0 }, }; 340 341
/** 342
* First and last Chinese character with known Pinyin according to zh 343
* collation 344
*/ 345
private static final String FIRST_PINYIN_UNIHAN = "\u963F"; 346
private static final String LAST_PINYIN_UNIHAN = "\u9FFF"; 347 348
private static final Collator COLLATOR = Collator.getInstance(Locale.CHINA); 349 350
private static HanziToPinyin sI 351
private final boolean mHasChinaC 352 353
public static class Token { 354
/** 355
* Separator between target string for each source char 356
*/ 357
public static final String SEPARATOR = " "; 358 359
public static final int LATIN = 1; 360
public static final int PINYIN = 2; 361
public static final int UNKNOWN = 3; 362 363
public Token() { 364
} 365 366
public Token(int type, String source, String target) { 367
this.type = 368
this.source = 369
this.target = 370
} 371 372
/** 373
* Type of this token, ASCII, PINYIN or UNKNOWN. 374
*/ 375
/** 377
* Original string before translation. 378
*/ 379
public S 380
/** 381
* Translated string of source. For Han, target is corresponding Pinyin. 382
* Otherwise target is original string in source. 383
*/ 384
public S 385
} 386 387
protected HanziToPinyin(boolean hasChinaCollator) { 388
mHasChinaCollator = hasChinaC 389
} 390 391
public static HanziToPinyin getInstance() { 392
synchronized (HanziToPinyin.class) { 393
if (sInstance != null) { 394
return sI 395
// Check if zh_CN collation data is available 397
final Locale locale[] = Collator.getAvailableLocales(); 398 399
// 增加的代码,增强。 400
final Locale chinaAddition = new Locale("zh"); 401 402
for (int i = 0; i & locale. i++) { 403
if (locale[i].equals(Locale.CHINA) 404
|| locale[i].equals(chinaAddition)) { 405
// Do self validation just once. 406
if (DEBUG) { 407
Log.d(TAG, "Self validation. Result: " 408
+ doSelfValidation()); 409
sInstance = new HanziToPinyin(true); 411
return sI 412
Log.w(TAG, 415
"There is no Chinese collator, HanziToPinyin is disabled"); 416
sInstance = new HanziToPinyin(false); 417
return sI 418
} 420 421
/** 422
* Validate if our internal table has some wrong value. 423
* @return true when the table looks correct. 425
*/ 426
private static boolean doSelfValidation() { 427
char lastChar = UNIHANS[0]; 428
String lastString = Character.toString(lastChar); 429
for (char c : UNIHANS) { 430
if (lastChar == c) { 431
final String curString = Character.toString(c); 434
int cmp = pare(lastString, curString); 435
if (cmp &= 0) { 436
Log.e(TAG, "Internal error in Unihan table. " 437
+ "The last string \"" + lastString 438
+ "\" is greater than current string \"" + curString 439
+ "\"."); 440
lastString = curS 443
} 444 445
} 446 447
private Token getToken(char character) { 448
Token token = new Token(); 449
final String letter = Character.toString(character); 450
token.source = 451
int offset = -1; 452 453
if (character & 256) { 454
token.type = Token.LATIN; 455
token.target = 456
} else { 458
cmp = pare(letter, FIRST_PINYIN_UNIHAN); 459
if (cmp & 0) { 460
token.type = Token.UNKNOWN; 461
token.target = 462
} else if (cmp == 0) { 464
token.type = Token.PINYIN; 465
offset = 0; 466
} else { 467
cmp = pare(letter, LAST_PINYIN_UNIHAN); 468
if (cmp & 0) { 469
token.type = Token.UNKNOWN; 470
token.target = 471
} else if (cmp == 0) { 473
token.type = Token.PINYIN; 474
offset = UNIHANS.length - 1; 475
} 478 479
token.type = Token.PINYIN; 480
if (offset & 0) { 481
int begin = 0; 482
int end = UNIHANS.length - 1; 483
while (begin &= end) { 484
offset = (begin + end) / 2; 485
final String unihan = Character.toString(UNIHANS[offset]); 486
cmp = pare(letter, unihan); 487
if (cmp == 0) { 488
} else if (cmp & 0) { 490
begin = offset + 1; 491
} else { 492
end = offset - 1; 493
if (cmp & 0) { 497
offset--; 498
StringBuilder pinyin = new StringBuilder(); 500
for (int j = 0; j & PINYINS[offset].length && PINYINS[offset][j] != 0; j++) { 501
pinyin.append((char) PINYINS[offset][j]); 502
token.target = pinyin.toString(); 504
if (TextUtils.isEmpty(token.target)) { 505
token.type = Token.UNKNOWN; 506
token.target = token. 507
} 508 509
} 510 511
/** 512
* Convert the input to a array of tokens. The sequence of ASCII or Unknown 513
* characters without space will be put into a Token, One Hanzi character 514
* which has pinyin will be treated as a Token. If these is no China 515
* collator, the empty token array is returned. 516
*/ 517
public ArrayList&Token& get(final String input) { 518
ArrayList&Token& tokens = new ArrayList&Token&(); 519
if (!mHasChinaCollator || TextUtils.isEmpty(input)) { 520
// return empty tokens. 521
final int inputLength = input.length(); 524
final StringBuilder sb = new StringBuilder(); 525
int tokenType = Token.LATIN; 526
// Go through the input, create a new token when 527
// a. Token type changed 528
// b. Get the Pinyin of current charater. 529
// c. current character is space. 530
for (int i = 0; i & inputL i++) { 531
final char character = input.charAt(i); 532
if (character == ' ') { 533
if (sb.length() & 0) { 534
addToken(sb, tokens, tokenType); 535
} else if (character & 256) { 537
if (tokenType != Token.LATIN && sb.length() & 0) { 538
addToken(sb, tokens, tokenType); 539
tokenType = Token.LATIN; 541
sb.append(character); 542
} else { 543
Token t = getToken(character); 544
if (t.type == Token.PINYIN) { 545
if (sb.length() & 0) { 546
addToken(sb, tokens, tokenType); 547
tokens.add(t); 549
tokenType = Token.PINYIN; 550
} else { 551
if (tokenType != t.type && sb.length() & 0) { 552
addToken(sb, tokens, tokenType); 553
tokenType = t. 555
sb.append(character); 556
if (sb.length() & 0) { 560
addToken(sb, tokens, tokenType); 561
} 564 565
private void addToken(final StringBuilder sb, 566
final ArrayList&Token& tokens, final int tokenType) { 567
String str = sb.toString(); 568
tokens.add(new Token(tokenType, str, str)); 569
sb.setLength(0); 570
} 571 } HanziToPinyin.java 写一个MainActivity.java测试汉字转化为汉语拼音输出的效果: 1 package zhangphil. 2 3 import java.util.ArrayL 4 5 import zhangphil.hanyupinyin.HanziToPinyin.T 6 import android.app.A 7 import android.os.B 8 9 public class MainActivity extends Activity { 10 11
@Override 12
protected void onCreate(Bundle savedInstanceState) { 13
super.onCreate(savedInstanceState); 14 15
String s = "安卓"; 16
System.out.println("汉字转拼音输出: " + getPinYin(s)); 17
} 18 19
// 输入汉字返回拼音的通用方法函数。 20
public static String getPinYin(String hanzi) { 21
ArrayList&Token& tokens = HanziToPinyin.getInstance().get(hanzi); 22
StringBuilder sb = new StringBuilder(); 23
if (tokens != null && tokens.size() & 0) { 24
for (Token token : tokens) { 25
if (Token.PINYIN == token.type) { 26
sb.append(token.target); 27
} else { 28
sb.append(token.source); 29
} 32 33
return sb.toString().toUpperCase(); 34
} 35 } 结果输出如图:
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动

参考资料

 

随机推荐