Android通讯录开发之通讯录联系人搜索功能最新实现
2014年1月13日
之前的有两篇博客介绍了如何解决通讯录搜索功能的问题,那些方法都是从网上搜集,然后经过自己整理试验之后的,但在项目测试人员给我反馈,似乎还是存在一些问题,比如一些简拼没能搜出,或者简拼的转换有了问题,主要是因为中文的转换为简拼还是有点麻烦的,不同的编码支持的汉字又不同,比如gb2312编码支持汉字6763个汉字,并且分为两级,一级汉字3755个,二级汉字3008个,还对这两级汉字进行了分区,一级汉字是按拼音排序,二级汉字按笔画排序,所以网上提供的一些方法并没有覆盖绝大部分的汉字,才会导致有些简拼无法转换的现象。所以我还是抛弃了之前的方法,因为还是无法满足实现简拼搜索的要求。
下面小巫提供另外一个工具类,是目前我负责的项目最新的实现
[java] view plain copy print ?
  1. /*
  2. * Copyright (C) 2011 The Android Open Source Project
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. *      http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * 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. package com.suntek.mobilemeeting.utils;
  17. import android.text.TextUtils;
  18. import android.util.Log;
  19. import java.text.Collator;
  20. import java.util.ArrayList;
  21. import java.util.Locale;
  22. /**
  23. * An object to convert Chinese character to its corresponding pinyin string. For characters with
  24. * multiple possible pinyin string, only one is selected according to collator. Polyphone is not
  25. * supported in this implementation. This class is implemented to achieve the best runtime
  26. * performance and minimum runtime resources with tolerable sacrifice of accuracy. This
  27. * implementation highly depends on zh_CN ICU collation data and must be always synchronized with
  28. * ICU.
  29. *
  30. * Currently this file is aligned to zh.txt in ICU 4.6
  31. */
  32. public class HanziToPinyin {
  33. private static final String TAG = "HanziToPinyin";
  34. // Turn on this flag when we want to check internal data structure.
  35. private static final boolean DEBUG = false;
  36. /**
  37. * Unihans array.
  38. *
  39. * Each unihans is the first one within same pinyin when collator is zh_CN.
  40. */
  41. public static final char[] UNIHANS = {
  42. '\u963f', '\u54ce', '\u5b89', '\u80ae', '\u51f9', '\u516b',
  43. '\u6300', '\u6273', '\u90a6', '\u52f9', '\u9642', '\u5954',
  44. '\u4f3b', '\u5c44', '\u8fb9', '\u706c', '\u618b', '\u6c43',
  45. '\u51ab', '\u7676', '\u5cec', '\u5693', '\u5072', '\u53c2',
  46. '\u4ed3', '\u64a1', '\u518a', '\u5d7e', '\u66fd', '\u66fe',
  47. '\u5c64', '\u53c9', '\u8286', '\u8fbf', '\u4f25', '\u6284',
  48. '\u8f66', '\u62bb', '\u6c88', '\u6c89', '\u9637', '\u5403',
  49. '\u5145', '\u62bd', '\u51fa', '\u6b3b', '\u63e3', '\u5ddb',
  50. '\u5205', '\u5439', '\u65fe', '\u9034', '\u5472', '\u5306',
  51. '\u51d1', '\u7c97', '\u6c46', '\u5d14', '\u90a8', '\u6413',
  52. '\u5491', '\u5446', '\u4e39', '\u5f53', '\u5200', '\u561a',
  53. '\u6265', '\u706f', '\u6c10', '\u55f2', '\u7538', '\u5201',
  54. '\u7239', '\u4e01', '\u4e1f', '\u4e1c', '\u543a', '\u53be',
  55. '\u8011', '\u8968', '\u5428', '\u591a', '\u59b8', '\u8bf6',
  56. '\u5940', '\u97a5', '\u513f', '\u53d1', '\u5e06', '\u531a',
  57. '\u98de', '\u5206', '\u4e30', '\u8985', '\u4ecf', '\u7d11',
  58. '\u4f15', '\u65ee', '\u4f85', '\u7518', '\u5188', '\u768b',
  59. '\u6208', '\u7ed9', '\u6839', '\u522f', '\u5de5', '\u52fe',
  60. '\u4f30', '\u74dc', '\u4e56', '\u5173', '\u5149', '\u5f52',
  61. '\u4e28', '\u5459', '\u54c8', '\u548d', '\u4f44', '\u592f',
  62. '\u8320', '\u8bc3', '\u9ed2', '\u62eb', '\u4ea8', '\u5677',
  63. '\u53ff', '\u9f41', '\u4e6f', '\u82b1', '\u6000', '\u72bf',
  64. '\u5ddf', '\u7070', '\u660f', '\u5419', '\u4e0c', '\u52a0',
  65. '\u620b', '\u6c5f', '\u827d', '\u9636', '\u5dfe', '\u5755',
  66. '\u5182', '\u4e29', '\u51e5', '\u59e2', '\u5658', '\u519b',
  67. '\u5494', '\u5f00', '\u520a', '\u5ffc', '\u5c3b', '\u533c',
  68. '\u808e', '\u52a5', '\u7a7a', '\u62a0', '\u625d', '\u5938',
  69. '\u84af', '\u5bbd', '\u5321', '\u4e8f', '\u5764', '\u6269',
  70. '\u5783', '\u6765', '\u5170', '\u5577', '\u635e', '\u808b',
  71. '\u52d2', '\u5d1a', '\u5215', '\u4fe9', '\u5941', '\u826f',
  72. '\u64a9', '\u5217', '\u62ce', '\u5222', '\u6e9c', '\u56d6',
  73. '\u9f99', '\u779c', '\u565c', '\u5a08', '\u7567', '\u62a1',
  74. '\u7f57', '\u5463', '\u5988', '\u57cb', '\u5ada', '\u7264',
  75. '\u732b', '\u4e48', '\u5445', '\u95e8', '\u753f', '\u54aa',
  76. '\u5b80', '\u55b5', '\u4e5c', '\u6c11', '\u540d', '\u8c2c',
  77. '\u6478', '\u54de', '\u6bea', '\u55ef', '\u62cf', '\u8149',
  78. '\u56e1', '\u56d4', '\u5b6c', '\u7592', '\u5a1e', '\u6041',
  79. '\u80fd', '\u59ae', '\u62c8', '\u5b22', '\u9e1f', '\u634f',
  80. '\u56dc', '\u5b81', '\u599e', '\u519c', '\u7fba', '\u5974',
  81. '\u597b', '\u759f', '\u9ec1', '\u90cd', '\u5594', '\u8bb4',
  82. '\u5991', '\u62cd', '\u7705', '\u4e53', '\u629b', '\u5478',
  83. '\u55b7', '\u5309', '\u4e15', '\u56e8', '\u527d', '\u6c15',
  84. '\u59d8', '\u4e52', '\u948b', '\u5256', '\u4ec6', '\u4e03',
  85. '\u6390', '\u5343', '\u545b', '\u6084', '\u767f', '\u4eb2',
  86. '\u72c5', '\u828e', '\u4e18', '\u533a', '\u5cd1', '\u7f3a',
  87. '\u590b', '\u5465', '\u7a63', '\u5a06', '\u60f9', '\u4eba',
  88. '\u6254', '\u65e5', '\u8338', '\u53b9', '\u909a', '\u633c',
  89. '\u5827', '\u5a51', '\u77a4', '\u637c', '\u4ee8', '\u6be2',
  90. '\u4e09', '\u6852', '\u63bb', '\u95aa', '\u68ee', '\u50e7',
  91. '\u6740', '\u7b5b', '\u5c71', '\u4f24', '\u5f30', '\u5962',
  92. '\u7533', '\u8398', '\u6552', '\u5347', '\u5c38', '\u53ce',
  93. '\u4e66', '\u5237', '\u8870', '\u95e9', '\u53cc', '\u8c01',
  94. '\u542e', '\u8bf4', '\u53b6', '\u5fea', '\u635c', '\u82cf',
  95. '\u72fb', '\u590a', '\u5b59', '\u5506', '\u4ed6', '\u56fc',
  96. '\u574d', '\u6c64', '\u5932', '\u5fd1', '\u71a5', '\u5254',
  97. '\u5929', '\u65eb', '\u5e16', '\u5385', '\u56f2', '\u5077',
  98. '\u51f8', '\u6e4d', '\u63a8', '\u541e', '\u4e47', '\u7a75',
  99. '\u6b6a', '\u5f2f', '\u5c23', '\u5371', '\u6637', '\u7fc1',
  100. '\u631d', '\u4e4c', '\u5915', '\u8672', '\u4eda', '\u4e61',
  101. '\u7071', '\u4e9b', '\u5fc3', '\u661f', '\u51f6', '\u4f11',
  102. '\u5401', '\u5405', '\u524a', '\u5743', '\u4e2b', '\u6079',
  103. '\u592e', '\u5e7a', '\u503b', '\u4e00', '\u56d9', '\u5e94',
  104. '\u54df', '\u4f63', '\u4f18', '\u625c', '\u56e6', '\u66f0',
  105. '\u6655', '\u7b60', '\u7b7c', '\u5e00', '\u707d', '\u5142',
  106. '\u5328', '\u50ae', '\u5219', '\u8d3c', '\u600e', '\u5897',
  107. '\u624e', '\u635a', '\u6cbe', '\u5f20', '\u957f', '\u9577',
  108. '\u4f4b', '\u8707', '\u8d1e', '\u4e89', '\u4e4b', '\u5cd9',
  109. '\u5ea2', '\u4e2d', '\u5dde', '\u6731', '\u6293', '\u62fd',
  110. '\u4e13', '\u5986', '\u96b9', '\u5b92', '\u5353', '\u4e72',
  111. '\u5b97', '\u90b9', '\u79df', '\u94bb', '\u539c', '\u5c0a',
  112. '\u6628', '\u5159', '\u9fc3', '\u9fc4', };
  113. /**
  114. * Pinyin array.
  115. *
  116. * Each pinyin is corresponding to unihans of same
  117. * offset in the unihans array.
  118. */
  119. public static final byte[][] PINYINS = {
  120. { 65,   0,   0,   0,   0,   0}, { 65,  73,   0,   0,   0,   0},
  121. { 65,  78,   0,   0,   0,   0}, { 65,  78,  71,   0,   0,   0},
  122. { 65,  79,   0,   0,   0,   0}, { 66,  65,   0,   0,   0,   0},
  123. { 66,  65,  73,   0,   0,   0}, { 66,  65,  78,   0,   0,   0},
  124. { 66,  65,  78,  71,   0,   0}, { 66,  65,  79,   0,   0,   0},
  125. { 66,  69,  73,   0,   0,   0}, { 66,  69,  78,   0,   0,   0},
  126. { 66,  69,  78,  71,   0,   0}, { 66,  73,   0,   0,   0,   0},
  127. { 66,  73,  65,  78,   0,   0}, { 66,  73,  65,  79,   0,   0},
  128. { 66,  73,  69,   0,   0,   0}, { 66,  73,  78,   0,   0,   0},
  129. { 66,  73,  78,  71,   0,   0}, { 66,  79,   0,   0,   0,   0},
  130. { 66,  85,   0,   0,   0,   0}, { 67,  65,   0,   0,   0,   0},
  131. { 67,  65,  73,   0,   0,   0}, { 67,  65,  78,   0,   0,   0},
  132. { 67,  65,  78,  71,   0,   0}, { 67,  65,  79,   0,   0,   0},
  133. { 67,  69,   0,   0,   0,   0}, { 67,  69,  78,   0,   0,   0},
  134. { 67,  69,  78,  71,   0,   0}, { 90,  69,  78,  71,   0,   0},
  135. { 67,  69,  78,  71,   0,   0}, { 67,  72,  65,   0,   0,   0},
  136. { 67,  72,  65,  73,   0,   0}, { 67,  72,  65,  78,   0,   0},
  137. { 67,  72,  65,  78,  71,   0}, { 67,  72,  65,  79,   0,   0},
  138. { 67,  72,  69,   0,   0,   0}, { 67,  72,  69,  78,   0,   0},
  139. { 83,  72,  69,  78,   0,   0}, { 67,  72,  69,  78,   0,   0},
  140. { 67,  72,  69,  78,  71,   0}, { 67,  72,  73,   0,   0,   0},
  141. { 67,  72,  79,  78,  71,   0}, { 67,  72,  79,  85,   0,   0},
  142. { 67,  72,  85,   0,   0,   0}, { 67,  72,  85,  65,   0,   0},
  143. { 67,  72,  85,  65,  73,   0}, { 67,  72,  85,  65,  78,   0},
  144. { 67,  72,  85,  65,  78,  71}, { 67,  72,  85,  73,   0,   0},
  145. { 67,  72,  85,  78,   0,   0}, { 67,  72,  85,  79,   0,   0},
  146. { 67,  73,   0,   0,   0,   0}, { 67,  79,  78,  71,   0,   0},
  147. { 67,  79,  85,   0,   0,   0}, { 67,  85,   0,   0,   0,   0},
  148. { 67,  85,  65,  78,   0,   0}, { 67,  85,  73,   0,   0,   0},
  149. { 67,  85,  78,   0,   0,   0}, { 67,  85,  79,   0,   0,   0},
  150. { 68,  65,   0,   0,   0,   0}, { 68,  65,  73,   0,   0,   0},
  151. { 68,  65,  78,   0,   0,   0}, { 68,  65,  78,  71,   0,   0},
  152. { 68,  65,  79,   0,   0,   0}, { 68,  69,   0,   0,   0,   0},
  153. { 68,  69,  78,   0,   0,   0}, { 68,  69,  78,  71,   0,   0},
  154. { 68,  73,   0,   0,   0,   0}, { 68,  73,  65,   0,   0,   0},
  155. { 68,  73,  65,  78,   0,   0}, { 68,  73,  65,  79,   0,   0},
  156. { 68,  73,  69,   0,   0,   0}, { 68,  73,  78,  71,   0,   0},
  157. { 68,  73,  85,   0,   0,   0}, { 68,  79,  78,  71,   0,   0},
  158. { 68,  79,  85,   0,   0,   0}, { 68,  85,   0,   0,   0,   0},
  159. { 68,  85,  65,  78,   0,   0}, { 68,  85,  73,   0,   0,   0},
  160. { 68,  85,  78,   0,   0,   0}, { 68,  85,  79,   0,   0,   0},
  161. { 69,   0,   0,   0,   0,   0}, { 69,  73,   0,   0,   0,   0},
  162. { 69,  78,   0,   0,   0,   0}, { 69,  78,  71,   0,   0,   0},
  163. { 69,  82,   0,   0,   0,   0}, { 70,  65,   0,   0,   0,   0},
  164. { 70,  65,  78,   0,   0,   0}, { 70,  65,  78,  71,   0,   0},
  165. { 70,  69,  73,   0,   0,   0}, { 70,  69,  78,   0,   0,   0},
  166. { 70,  69,  78,  71,   0,   0}, { 70,  73,  65,  79,   0,   0},
  167. { 70,  79,   0,   0,   0,   0}, { 70,  79,  85,   0,   0,   0},
  168. { 70,  85,   0,   0,   0,   0}, { 71,  65,   0,   0,   0,   0},
  169. { 71,  65,  73,   0,   0,   0}, { 71,  65,  78,   0,   0,   0},
  170. { 71,  65,  78,  71,   0,   0}, { 71,  65,  79,   0,   0,   0},
  171. { 71,  69,   0,   0,   0,   0}, { 71,  69,  73,   0,   0,   0},
  172. { 71,  69,  78,   0,   0,   0}, { 71,  69,  78,  71,   0,   0},
  173. { 71,  79,  78,  71,   0,   0}, { 71,  79,  85,   0,   0,   0},
  174. { 71,  85,   0,   0,   0,   0}, { 71,  85,  65,   0,   0,   0},
  175. { 71,  85,  65,  73,   0,   0}, { 71,  85,  65,  78,   0,   0},
  176. { 71,  85,  65,  78,  71,   0}, { 71,  85,  73,   0,   0,   0},
  177. { 71,  85,  78,   0,   0,   0}, { 71,  85,  79,   0,   0,   0},
  178. { 72,  65,   0,   0,   0,   0}, { 72,  65,  73,   0,   0,   0},
  179. { 72,  65,  78,   0,   0,   0}, { 72,  65,  78,  71,   0,   0},
  180. { 72,  65,  79,   0,   0,   0}, { 72,  69,   0,   0,   0,   0},
  181. { 72,  69,  73,   0,   0,   0}, { 72,  69,  78,   0,   0,   0},
  182. { 72,  69,  78,  71,   0,   0}, { 72,  77,   0,   0,   0,   0},
  183. { 72,  79,  78,  71,   0,   0}, { 72,  79,  85,   0,   0,   0},
  184. { 72,  85,   0,   0,   0,   0}, { 72,  85,  65,   0,   0,   0},
  185. { 72,  85,  65,  73,   0,   0}, { 72,  85,  65,  78,   0,   0},
  186. { 72,  85,  65,  78,  71,   0}, { 72,  85,  73,   0,   0,   0},
  187. { 72,  85,  78,   0,   0,   0}, { 72,  85,  79,   0,   0,   0},
  188. { 74,  73,   0,   0,   0,   0}, { 74,  73,  65,   0,   0,   0},
  189. { 74,  73,  65,  78,   0,   0}, { 74,  73,  65,  78,  71,   0},
  190. { 74,  73,  65,  79,   0,   0}, { 74,  73,  69,   0,   0,   0},
  191. { 74,  73,  78,   0,   0,   0}, { 74,  73,  78,  71,   0,   0},
  192. { 74,  73,  79,  78,  71,   0}, { 74,  73,  85,   0,   0,   0},
  193. { 74,  85,   0,   0,   0,   0}, { 74,  85,  65,  78,   0,   0},
  194. { 74,  85,  69,   0,   0,   0}, { 74,  85,  78,   0,   0,   0},
  195. { 75,  65,   0,   0,   0,   0}, { 75,  65,  73,   0,   0,   0},
  196. { 75,  65,  78,   0,   0,   0}, { 75,  65,  78,  71,   0,   0},
  197. { 75,  65,  79,   0,   0,   0}, { 75,  69,   0,   0,   0,   0},
  198. { 75,  69,  78,   0,   0,   0}, { 75,  69,  78,  71,   0,   0},
  199. { 75,  79,  78,  71,   0,   0}, { 75,  79,  85,   0,   0,   0},
  200. { 75,  85,   0,   0,   0,   0}, { 75,  85,  65,   0,   0,   0},
  201. { 75,  85,  65,  73,   0,   0}, { 75,  85,  65,  78,   0,   0},
  202. { 75,  85,  65,  78,  71,   0}, { 75,  85,  73,   0,   0,   0},
  203. { 75,  85,  78,   0,   0,   0}, { 75,  85,  79,   0,   0,   0},
  204. { 76,  65,   0,   0,   0,   0}, { 76,  65,  73,   0,   0,   0},
  205. { 76,  65,  78,   0,   0,   0}, { 76,  65,  78,  71,   0,   0},
  206. { 76,  65,  79,   0,   0,   0}, { 76,  69,   0,   0,   0,   0},
  207. { 76,  69,  73,   0,   0,   0}, { 76,  69,  78,  71,   0,   0},
  208. { 76,  73,   0,   0,   0,   0}, { 76,  73,  65,   0,   0,   0},
  209. { 76,  73,  65,  78,   0,   0}, { 76,  73,  65,  78,  71,   0},
  210. { 76,  73,  65,  79,   0,   0}, { 76,  73,  69,   0,   0,   0},
  211. { 76,  73,  78,   0,   0,   0}, { 76,  73,  78,  71,   0,   0},
  212. { 76,  73,  85,   0,   0,   0}, { 76,  79,   0,   0,   0,   0},
  213. { 76,  79,  78,  71,   0,   0}, { 76,  79,  85,   0,   0,   0},
  214. { 76,  85,   0,   0,   0,   0}, { 76,  85,  65,  78,   0,   0},
  215. { 76,  85,  69,   0,   0,   0}, { 76,  85,  78,   0,   0,   0},
  216. { 76,  85,  79,   0,   0,   0}, { 77,   0,   0,   0,   0,   0},
  217. { 77,  65,   0,   0,   0,   0}, { 77,  65,  73,   0,   0,   0},
  218. { 77,  65,  78,   0,   0,   0}, { 77,  65,  78,  71,   0,   0},
  219. { 77,  65,  79,   0,   0,   0}, { 77,  69,   0,   0,   0,   0},
  220. { 77,  69,  73,   0,   0,   0}, { 77,  69,  78,   0,   0,   0},
  221. { 77,  69,  78,  71,   0,   0}, { 77,  73,   0,   0,   0,   0},
  222. { 77,  73,  65,  78,   0,   0}, { 77,  73,  65,  79,   0,   0},
  223. { 77,  73,  69,   0,   0,   0}, { 77,  73,  78,   0,   0,   0},
  224. { 77,  73,  78,  71,   0,   0}, { 77,  73,  85,   0,   0,   0},
  225. { 77,  79,   0,   0,   0,   0}, { 77,  79,  85,   0,   0,   0},
  226. { 77,  85,   0,   0,   0,   0}, { 78,   0,   0,   0,   0,   0},
  227. { 78,  65,   0,   0,   0,   0}, { 78,  65,  73,   0,   0,   0},
  228. { 78,  65,  78,   0,   0,   0}, { 78,  65,  78,  71,   0,   0},
  229. { 78,  65,  79,   0,   0,   0}, { 78,  69,   0,   0,   0,   0},
  230. { 78,  69,  73,   0,   0,   0}, { 78,  69,  78,   0,   0,   0},
  231. { 78,  69,  78,  71,   0,   0}, { 78,  73,   0,   0,   0,   0},
  232. { 78,  73,  65,  78,   0,   0}, { 78,  73,  65,  78,  71,   0},
  233. { 78,  73,  65,  79,   0,   0}, { 78,  73,  69,   0,   0,   0},
  234. { 78,  73,  78,   0,   0,   0}, { 78,  73,  78,  71,   0,   0},
  235. { 78,  73,  85,   0,   0,   0}, { 78,  79,  78,  71,   0,   0},
  236. { 78,  79,  85,   0,   0,   0}, { 78,  85,   0,   0,   0,   0},
  237. { 78,  85,  65,  78,   0,   0}, { 78,  85,  69,   0,   0,   0},
  238. { 78,  85,  78,   0,   0,   0}, { 78,  85,  79,   0,   0,   0},
  239. { 79,   0,   0,   0,   0,   0}, { 79,  85,   0,   0,   0,   0},
  240. { 80,  65,   0,   0,   0,   0}, { 80,  65,  73,   0,   0,   0},
  241. { 80,  65,  78,   0,   0,   0}, { 80,  65,  78,  71,   0,   0},
  242. { 80,  65,  79,   0,   0,   0}, { 80,  69,  73,   0,   0,   0},
  243. { 80,  69,  78,   0,   0,   0}, { 80,  69,  78,  71,   0,   0},
  244. { 80,  73,   0,   0,   0,   0}, { 80,  73,  65,  78,   0,   0},
  245. { 80,  73,  65,  79,   0,   0}, { 80,  73,  69,   0,   0,   0},
  246. { 80,  73,  78,   0,   0,   0}, { 80,  73,  78,  71,   0,   0},
  247. { 80,  79,   0,   0,   0,   0}, { 80,  79,  85,   0,   0,   0},
  248. { 80,  85,   0,   0,   0,   0}, { 81,  73,   0,   0,   0,   0},
  249. { 81,  73,  65,   0,   0,   0}, { 81,  73,  65,  78,   0,   0},
  250. { 81,  73,  65,  78,  71,   0}, { 81,  73,  65,  79,   0,   0},
  251. { 81,  73,  69,   0,   0,   0}, { 81,  73,  78,   0,   0,   0},
  252. { 81,  73,  78,  71,   0,   0}, { 81,  73,  79,  78,  71,   0},
  253. { 81,  73,  85,   0,   0,   0}, { 81,  85,   0,   0,   0,   0},
  254. { 81,  85,  65,  78,   0,   0}, { 81,  85,  69,   0,   0,   0},
  255. { 81,  85,  78,   0,   0,   0}, { 82,  65,  78,   0,   0,   0},
  256. { 82,  65,  78,  71,   0,   0}, { 82,  65,  79,   0,   0,   0},
  257. { 82,  69,   0,   0,   0,   0}, { 82,  69,  78,   0,   0,   0},
  258. { 82,  69,  78,  71,   0,   0}, { 82,  73,   0,   0,   0,   0},
  259. { 82,  79,  78,  71,   0,   0}, { 82,  79,  85,   0,   0,   0},
  260. { 82,  85,   0,   0,   0,   0}, { 82,  85,  65,   0,   0,   0},
  261. { 82,  85,  65,  78,   0,   0}, { 82,  85,  73,   0,   0,   0},
  262. { 82,  85,  78,   0,   0,   0}, { 82,  85,  79,   0,   0,   0},
  263. { 83,  65,   0,   0,   0,   0}, { 83,  65,  73,   0,   0,   0},
  264. { 83,  65,  78,   0,   0,   0}, { 83,  65,  78,  71,   0,   0},
  265. { 83,  65,  79,   0,   0,   0}, { 83,  69,   0,   0,   0,   0},
  266. { 83,  69,  78,   0,   0,   0}, { 83,  69,  78,  71,   0,   0},
  267. { 83,  72,  65,   0,   0,   0}, { 83,  72,  65,  73,   0,   0},
  268. { 83,  72,  65,  78,   0,   0}, { 83,  72,  65,  78,  71,   0},
  269. { 83,  72,  65,  79,   0,   0}, { 83,  72,  69,   0,   0,   0},
  270. { 83,  72,  69,  78,   0,   0}, { 88,  73,  78,   0,   0,   0},
  271. { 83,  72,  69,  78,   0,   0}, { 83,  72,  69,  78,  71,   0},
  272. { 83,  72,  73,   0,   0,   0}, { 83,  72,  79,  85,   0,   0},
  273. { 83,  72,  85,   0,   0,   0}, { 83,  72,  85,  65,   0,   0},
  274. { 83,  72,  85,  65,  73,   0}, { 83,  72,  85,  65,  78,   0},
  275. { 83,  72,  85,  65,  78,  71}, { 83,  72,  85,  73,   0,   0},
  276. { 83,  72,  85,  78,   0,   0}, { 83,  72,  85,  79,   0,   0},
  277. { 83,  73,   0,   0,   0,   0}, { 83,  79,  78,  71,   0,   0},
  278. { 83,  79,  85,   0,   0,   0}, { 83,  85,   0,   0,   0,   0},
  279. { 83,  85,  65,  78,   0,   0}, { 83,  85,  73,   0,   0,   0},
  280. { 83,  85,  78,   0,   0,   0}, { 83,  85,  79,   0,   0,   0},
  281. { 84,  65,   0,   0,   0,   0}, { 84,  65,  73,   0,   0,   0},
  282. { 84,  65,  78,   0,   0,   0}, { 84,  65,  78,  71,   0,   0},
  283. { 84,  65,  79,   0,   0,   0}, { 84,  69,   0,   0,   0,   0},
  284. { 84,  69,  78,  71,   0,   0}, { 84,  73,   0,   0,   0,   0},
  285. { 84,  73,  65,  78,   0,   0}, { 84,  73,  65,  79,   0,   0},
  286. { 84,  73,  69,   0,   0,   0}, { 84,  73,  78,  71,   0,   0},
  287. { 84,  79,  78,  71,   0,   0}, { 84,  79,  85,   0,   0,   0},
  288. { 84,  85,   0,   0,   0,   0}, { 84,  85,  65,  78,   0,   0},
  289. { 84,  85,  73,   0,   0,   0}, { 84,  85,  78,   0,   0,   0},
  290. { 84,  85,  79,   0,   0,   0}, { 87,  65,   0,   0,   0,   0},
  291. { 87,  65,  73,   0,   0,   0}, { 87,  65,  78,   0,   0,   0},
  292. { 87,  65,  78,  71,   0,   0}, { 87,  69,  73,   0,   0,   0},
  293. { 87,  69,  78,   0,   0,   0}, { 87,  69,  78,  71,   0,   0},
  294. { 87,  79,   0,   0,   0,   0}, { 87,  85,   0,   0,   0,   0},
  295. { 88,  73,   0,   0,   0,   0}, { 88,  73,  65,   0,   0,   0},
  296. { 88,  73,  65,  78,   0,   0}, { 88,  73,  65,  78,  71,   0},
  297. { 88,  73,  65,  79,   0,   0}, { 88,  73,  69,   0,   0,   0},
  298. { 88,  73,  78,   0,   0,   0}, { 88,  73,  78,  71,   0,   0},
  299. { 88,  73,  79,  78,  71,   0}, { 88,  73,  85,   0,   0,   0},
  300. { 88,  85,   0,   0,   0,   0}, { 88,  85,  65,  78,   0,   0},
  301. { 88,  85,  69,   0,   0,   0}, { 88,  85,  78,   0,   0,   0},
  302. { 89,  65,   0,   0,   0,   0}, { 89,  65,  78,   0,   0,   0},
  303. { 89,  65,  78,  71,   0,   0}, { 89,  65,  79,   0,   0,   0},
  304. { 89,  69,   0,   0,   0,   0}, { 89,  73,   0,   0,   0,   0},
  305. { 89,  73,  78,   0,   0,   0}, { 89,  73,  78,  71,   0,   0},
  306. { 89,  79,   0,   0,   0,   0}, { 89,  79,  78,  71,   0,   0},
  307. { 89,  79,  85,   0,   0,   0}, { 89,  85,   0,   0,   0,   0},
  308. { 89,  85,  65,  78,   0,   0}, { 89,  85,  69,   0,   0,   0},
  309. { 89,  85,  78,   0,   0,   0}, { 74,  85,  78,   0,   0,   0},
  310. { 89,  85,  78,   0,   0,   0}, { 90,  65,   0,   0,   0,   0},
  311. { 90,  65,  73,   0,   0,   0}, { 90,  65,  78,   0,   0,   0},
  312. { 90,  65,  78,  71,   0,   0}, { 90,  65,  79,   0,   0,   0},
  313. { 90,  69,   0,   0,   0,   0}, { 90,  69,  73,   0,   0,   0},
  314. { 90,  69,  78,   0,   0,   0}, { 90,  69,  78,  71,   0,   0},
  315. { 90,  72,  65,   0,   0,   0}, { 90,  72,  65,  73,   0,   0},
  316. { 90,  72,  65,  78,   0,   0}, { 90,  72,  65,  78,  71,   0},
  317. { 67,  72,  65,  78,  71,   0}, { 90,  72,  65,  78,  71,   0},
  318. { 90,  72,  65,  79,   0,   0}, { 90,  72,  69,   0,   0,   0},
  319. { 90,  72,  69,  78,   0,   0}, { 90,  72,  69,  78,  71,   0},
  320. { 90,  72,  73,   0,   0,   0}, { 83,  72,  73,   0,   0,   0},
  321. { 90,  72,  73,   0,   0,   0}, { 90,  72,  79,  78,  71,   0},
  322. { 90,  72,  79,  85,   0,   0}, { 90,  72,  85,   0,   0,   0},
  323. { 90,  72,  85,  65,   0,   0}, { 90,  72,  85,  65,  73,   0},
  324. { 90,  72,  85,  65,  78,   0}, { 90,  72,  85,  65,  78,  71},
  325. { 90,  72,  85,  73,   0,   0}, { 90,  72,  85,  78,   0,   0},
  326. { 90,  72,  85,  79,   0,   0}, { 90,  73,   0,   0,   0,   0},
  327. { 90,  79,  78,  71,   0,   0}, { 90,  79,  85,   0,   0,   0},
  328. { 90,  85,   0,   0,   0,   0}, { 90,  85,  65,  78,   0,   0},
  329. { 90,  85,  73,   0,   0,   0}, { 90,  85,  78,   0,   0,   0},
  330. { 90,  85,  79,   0,   0,   0}, {  0,   0,   0,   0,   0,   0},
  331. { 83,  72,  65,  78,   0,   0}, {  0,   0,   0,   0,   0,   0}, };
  332. /** First and last Chinese character with known Pinyin according to zh collation */
  333. private static final String FIRST_PINYIN_UNIHAN = "\u963F";
  334. private static final String LAST_PINYIN_UNIHAN = "\u9FFF";
  335. private static final Collator COLLATOR = Collator.getInstance(Locale.CHINA);
  336. private static HanziToPinyin sInstance;
  337. private final boolean mHasChinaCollator;
  338. public static class Token {
  339. /**
  340. * Separator between target string for each source char
  341. */
  342. public static final String SEPARATOR = " ";
  343. public static final int LATIN = 1;
  344. public static final int PINYIN = 2;
  345. public static final int UNKNOWN = 3;
  346. public Token() {
  347. }
  348. public Token(int type, String source, String target) {
  349. this.type = type;
  350. this.source = source;
  351. this.target = target;
  352. }
  353. /**
  354. * Type of this token, ASCII, PINYIN or UNKNOWN.
  355. */
  356. public int type;
  357. /**
  358. * Original string before translation.
  359. */
  360. public String source;
  361. /**
  362. * Translated string of source. For Han, target is corresponding Pinyin. Otherwise target is
  363. * original string in source.
  364. */
  365. public String target;
  366. }
  367. protected HanziToPinyin(boolean hasChinaCollator) {
  368. mHasChinaCollator = hasChinaCollator;
  369. }
  370. public static HanziToPinyin getInstance() {
  371. synchronized (HanziToPinyin.class) {
  372. if (sInstance != null) {
  373. return sInstance;
  374. }
  375. // Check if zh_CN collation data is available
  376. final Locale locale[] = Collator.getAvailableLocales();
  377. for (int i = 0; i < locale.length; i++) {
  378. if (locale[i].equals(Locale.CHINA)) {
  379. // Do self validation just once.
  380. if (DEBUG) {
  381. Log.d(TAG, "Self validation. Result: " + doSelfValidation());
  382. }
  383. sInstance = new HanziToPinyin(true);
  384. return sInstance;
  385. }
  386. }
  387. Log.w(TAG, "There is no Chinese collator, HanziToPinyin is disabled");
  388. sInstance = new HanziToPinyin(false);
  389. return sInstance;
  390. }
  391. }
  392. /**
  393. * Validate if our internal table has some wrong value.
  394. *
  395. * @return true when the table looks correct.
  396. */
  397. private static boolean doSelfValidation() {
  398. char lastChar = UNIHANS[0];
  399. String lastString = Character.toString(lastChar);
  400. for (char c : UNIHANS) {
  401. if (lastChar == c) {
  402. continue;
  403. }
  404. final String curString = Character.toString(c);
  405. int cmp = COLLATOR.compare(lastString, curString);
  406. if (cmp >= 0) {
  407. Log.e(TAG, "Internal error in Unihan table. " + "The last string \"" + lastString
  408. + "\" is greater than current string \"" + curString + "\".");
  409. return false;
  410. }
  411. lastString = curString;
  412. }
  413. return true;
  414. }
  415. private Token getToken(char character) {
  416. Token token = new Token();
  417. final String letter = Character.toString(character);
  418. token.source = letter;
  419. int offset = -1;
  420. int cmp;
  421. if (character < 256) {
  422. token.type = Token.LATIN;
  423. token.target = letter;
  424. return token;
  425. } else {
  426. cmp = COLLATOR.compare(letter, FIRST_PINYIN_UNIHAN);
  427. if (cmp < 0) {
  428. token.type = Token.UNKNOWN;
  429. token.target = letter;
  430. return token;
  431. } else if (cmp == 0) {
  432. token.type = Token.PINYIN;
  433. offset = 0;
  434. } else {
  435. cmp = COLLATOR.compare(letter, LAST_PINYIN_UNIHAN);
  436. if (cmp > 0) {
  437. token.type = Token.UNKNOWN;
  438. token.target = letter;
  439. return token;
  440. } else if (cmp == 0) {
  441. token.type = Token.PINYIN;
  442. offset = UNIHANS.length - 1;
  443. }
  444. }
  445. }
  446. token.type = Token.PINYIN;
  447. if (offset < 0) {
  448. int begin = 0;
  449. int end = UNIHANS.length - 1;
  450. while (begin <= end) {
  451. offset = (begin + end) / 2;
  452. final String unihan = Character.toString(UNIHANS[offset]);
  453. cmp = COLLATOR.compare(letter, unihan);
  454. if (cmp == 0) {
  455. break;
  456. } else if (cmp > 0) {
  457. begin = offset + 1;
  458. } else {
  459. end = offset - 1;
  460. }
  461. }
  462. }
  463. if (cmp < 0) {
  464. offset--;
  465. }
  466. StringBuilder pinyin = new StringBuilder();
  467. for (int j = 0; j < PINYINS[offset].length && PINYINS[offset][j] != 0; j++) {
  468. pinyin.append((char) PINYINS[offset][j]);
  469. }
  470. token.target = pinyin.toString();
  471. if (TextUtils.isEmpty(token.target)) {
  472. token.type = Token.UNKNOWN;
  473. token.target = token.source;
  474. }
  475. return token;
  476. }
  477. /**
  478. * Convert the input to a array of tokens. The sequence of ASCII or Unknown characters without
  479. * space will be put into a Token, One Hanzi character which has pinyin will be treated as a
  480. * Token. If these is no China collator, the empty token array is returned.
  481. */
  482. public ArrayList<Token> get(final String input) {
  483. ArrayList<Token> tokens = new ArrayList<Token>();
  484. if (!mHasChinaCollator || TextUtils.isEmpty(input)) {
  485. // return empty tokens.
  486. return tokens;
  487. }
  488. final int inputLength = input.length();
  489. final StringBuilder sb = new StringBuilder();
  490. int tokenType = Token.LATIN;
  491. // Go through the input, create a new token when
  492. // a. Token type changed
  493. // b. Get the Pinyin of current charater.
  494. // c. current character is space.
  495. for (int i = 0; i < inputLength; i++) {
  496. final char character = input.charAt(i);
  497. if (character == ' ') {
  498. if (sb.length() > 0) {
  499. addToken(sb, tokens, tokenType);
  500. }
  501. } else if (character < 256) {
  502. if (tokenType != Token.LATIN && sb.length() > 0) {
  503. addToken(sb, tokens, tokenType);
  504. }
  505. tokenType = Token.LATIN;
  506. sb.append(character);
  507. } else {
  508. Token t = getToken(character);
  509. if (t.type == Token.PINYIN) {
  510. if (sb.length() > 0) {
  511. addToken(sb, tokens, tokenType);
  512. }
  513. tokens.add(t);
  514. tokenType = Token.PINYIN;
  515. } else {
  516. if (tokenType != t.type && sb.length() > 0) {
  517. addToken(sb, tokens, tokenType);
  518. }
  519. tokenType = t.type;
  520. sb.append(character);
  521. }
  522. }
  523. }
  524. if (sb.length() > 0) {
  525. addToken(sb, tokens, tokenType);
  526. }
  527. return tokens;
  528. }
  529. private void addToken(
  530. final StringBuilder sb, final ArrayList<Token> tokens, final int tokenType) {
  531. String str = sb.toString();
  532. tokens.add(new Token(tokenType, str, str));
  533. sb.setLength(0);
  534. }
  535. }
/** 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* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/package com.suntek.mobilemeeting.utils;import android.text.TextUtils;
import android.util.Log;import java.text.Collator;
import java.util.ArrayList;
import java.util.Locale;/*** An object to convert Chinese character to its corresponding pinyin string. For characters with* multiple possible pinyin string, only one is selected according to collator. Polyphone is not* supported in this implementation. This class is implemented to achieve the best runtime* performance and minimum runtime resources with tolerable sacrifice of accuracy. This* implementation highly depends on zh_CN ICU collation data and must be always synchronized with* ICU.** Currently this file is aligned to zh.txt in ICU 4.6*/
public class HanziToPinyin {private static final String TAG = "HanziToPinyin";// Turn on this flag when we want to check internal data structure.private static final boolean DEBUG = false;/*** Unihans array.** Each unihans is the first one within same pinyin when collator is zh_CN.*/public static final char[] UNIHANS = {'\u963f', '\u54ce', '\u5b89', '\u80ae', '\u51f9', '\u516b','\u6300', '\u6273', '\u90a6', '\u52f9', '\u9642', '\u5954','\u4f3b', '\u5c44', '\u8fb9', '\u706c', '\u618b', '\u6c43','\u51ab', '\u7676', '\u5cec', '\u5693', '\u5072', '\u53c2','\u4ed3', '\u64a1', '\u518a', '\u5d7e', '\u66fd', '\u66fe','\u5c64', '\u53c9', '\u8286', '\u8fbf', '\u4f25', '\u6284','\u8f66', '\u62bb', '\u6c88', '\u6c89', '\u9637', '\u5403','\u5145', '\u62bd', '\u51fa', '\u6b3b', '\u63e3', '\u5ddb','\u5205', '\u5439', '\u65fe', '\u9034', '\u5472', '\u5306','\u51d1', '\u7c97', '\u6c46', '\u5d14', '\u90a8', '\u6413','\u5491', '\u5446', '\u4e39', '\u5f53', '\u5200', '\u561a','\u6265', '\u706f', '\u6c10', '\u55f2', '\u7538', '\u5201','\u7239', '\u4e01', '\u4e1f', '\u4e1c', '\u543a', '\u53be','\u8011', '\u8968', '\u5428', '\u591a', '\u59b8', '\u8bf6','\u5940', '\u97a5', '\u513f', '\u53d1', '\u5e06', '\u531a','\u98de', '\u5206', '\u4e30', '\u8985', '\u4ecf', '\u7d11','\u4f15', '\u65ee', '\u4f85', '\u7518', '\u5188', '\u768b','\u6208', '\u7ed9', '\u6839', '\u522f', '\u5de5', '\u52fe','\u4f30', '\u74dc', '\u4e56', '\u5173', '\u5149', '\u5f52','\u4e28', '\u5459', '\u54c8', '\u548d', '\u4f44', '\u592f','\u8320', '\u8bc3', '\u9ed2', '\u62eb', '\u4ea8', '\u5677','\u53ff', '\u9f41', '\u4e6f', '\u82b1', '\u6000', '\u72bf','\u5ddf', '\u7070', '\u660f', '\u5419', '\u4e0c', '\u52a0','\u620b', '\u6c5f', '\u827d', '\u9636', '\u5dfe', '\u5755','\u5182', '\u4e29', '\u51e5', '\u59e2', '\u5658', '\u519b','\u5494', '\u5f00', '\u520a', '\u5ffc', '\u5c3b', '\u533c','\u808e', '\u52a5', '\u7a7a', '\u62a0', '\u625d', '\u5938','\u84af', '\u5bbd', '\u5321', '\u4e8f', '\u5764', '\u6269','\u5783', '\u6765', '\u5170', '\u5577', '\u635e', '\u808b','\u52d2', '\u5d1a', '\u5215', '\u4fe9', '\u5941', '\u826f','\u64a9', '\u5217', '\u62ce', '\u5222', '\u6e9c', '\u56d6','\u9f99', '\u779c', '\u565c', '\u5a08', '\u7567', '\u62a1','\u7f57', '\u5463', '\u5988', '\u57cb', '\u5ada', '\u7264','\u732b', '\u4e48', '\u5445', '\u95e8', '\u753f', '\u54aa','\u5b80', '\u55b5', '\u4e5c', '\u6c11', '\u540d', '\u8c2c','\u6478', '\u54de', '\u6bea', '\u55ef', '\u62cf', '\u8149','\u56e1', '\u56d4', '\u5b6c', '\u7592', '\u5a1e', '\u6041','\u80fd', '\u59ae', '\u62c8', '\u5b22', '\u9e1f', '\u634f','\u56dc', '\u5b81', '\u599e', '\u519c', '\u7fba', '\u5974','\u597b', '\u759f', '\u9ec1', '\u90cd', '\u5594', '\u8bb4','\u5991', '\u62cd', '\u7705', '\u4e53', '\u629b', '\u5478','\u55b7', '\u5309', '\u4e15', '\u56e8', '\u527d', '\u6c15','\u59d8', '\u4e52', '\u948b', '\u5256', '\u4ec6', '\u4e03','\u6390', '\u5343', '\u545b', '\u6084', '\u767f', '\u4eb2','\u72c5', '\u828e', '\u4e18', '\u533a', '\u5cd1', '\u7f3a','\u590b', '\u5465', '\u7a63', '\u5a06', '\u60f9', '\u4eba','\u6254', '\u65e5', '\u8338', '\u53b9', '\u909a', '\u633c','\u5827', '\u5a51', '\u77a4', '\u637c', '\u4ee8', '\u6be2','\u4e09', '\u6852', '\u63bb', '\u95aa', '\u68ee', '\u50e7','\u6740', '\u7b5b', '\u5c71', '\u4f24', '\u5f30', '\u5962','\u7533', '\u8398', '\u6552', '\u5347', '\u5c38', '\u53ce','\u4e66', '\u5237', '\u8870', '\u95e9', '\u53cc', '\u8c01','\u542e', '\u8bf4', '\u53b6', '\u5fea', '\u635c', '\u82cf','\u72fb', '\u590a', '\u5b59', '\u5506', '\u4ed6', '\u56fc','\u574d', '\u6c64', '\u5932', '\u5fd1', '\u71a5', '\u5254','\u5929', '\u65eb', '\u5e16', '\u5385', '\u56f2', '\u5077','\u51f8', '\u6e4d', '\u63a8', '\u541e', '\u4e47', '\u7a75','\u6b6a', '\u5f2f', '\u5c23', '\u5371', '\u6637', '\u7fc1','\u631d', '\u4e4c', '\u5915', '\u8672', '\u4eda', '\u4e61','\u7071', '\u4e9b', '\u5fc3', '\u661f', '\u51f6', '\u4f11','\u5401', '\u5405', '\u524a', '\u5743', '\u4e2b', '\u6079','\u592e', '\u5e7a', '\u503b', '\u4e00', '\u56d9', '\u5e94','\u54df', '\u4f63', '\u4f18', '\u625c', '\u56e6', '\u66f0','\u6655', '\u7b60', '\u7b7c', '\u5e00', '\u707d', '\u5142','\u5328', '\u50ae', '\u5219', '\u8d3c', '\u600e', '\u5897','\u624e', '\u635a', '\u6cbe', '\u5f20', '\u957f', '\u9577','\u4f4b', '\u8707', '\u8d1e', '\u4e89', '\u4e4b', '\u5cd9','\u5ea2', '\u4e2d', '\u5dde', '\u6731', '\u6293', '\u62fd','\u4e13', '\u5986', '\u96b9', '\u5b92', '\u5353', '\u4e72','\u5b97', '\u90b9', '\u79df', '\u94bb', '\u539c', '\u5c0a','\u6628', '\u5159', '\u9fc3', '\u9fc4', };/*** Pinyin array.** Each pinyin is corresponding to unihans of same* offset in the unihans array.*/public static final byte[][] PINYINS = {{ 65,   0,   0,   0,   0,   0}, { 65,  73,   0,   0,   0,   0},{ 65,  78,   0,   0,   0,   0}, { 65,  78,  71,   0,   0,   0},{ 65,  79,   0,   0,   0,   0}, { 66,  65,   0,   0,   0,   0},{ 66,  65,  73,   0,   0,   0}, { 66,  65,  78,   0,   0,   0},{ 66,  65,  78,  71,   0,   0}, { 66,  65,  79,   0,   0,   0},{ 66,  69,  73,   0,   0,   0}, { 66,  69,  78,   0,   0,   0},{ 66,  69,  78,  71,   0,   0}, { 66,  73,   0,   0,   0,   0},{ 66,  73,  65,  78,   0,   0}, { 66,  73,  65,  79,   0,   0},{ 66,  73,  69,   0,   0,   0}, { 66,  73,  78,   0,   0,   0},{ 66,  73,  78,  71,   0,   0}, { 66,  79,   0,   0,   0,   0},{ 66,  85,   0,   0,   0,   0}, { 67,  65,   0,   0,   0,   0},{ 67,  65,  73,   0,   0,   0}, { 67,  65,  78,   0,   0,   0},{ 67,  65,  78,  71,   0,   0}, { 67,  65,  79,   0,   0,   0},{ 67,  69,   0,   0,   0,   0}, { 67,  69,  78,   0,   0,   0},{ 67,  69,  78,  71,   0,   0}, { 90,  69,  78,  71,   0,   0},{ 67,  69,  78,  71,   0,   0}, { 67,  72,  65,   0,   0,   0},{ 67,  72,  65,  73,   0,   0}, { 67,  72,  65,  78,   0,   0},{ 67,  72,  65,  78,  71,   0}, { 67,  72,  65,  79,   0,   0},{ 67,  72,  69,   0,   0,   0}, { 67,  72,  69,  78,   0,   0},{ 83,  72,  69,  78,   0,   0}, { 67,  72,  69,  78,   0,   0},{ 67,  72,  69,  78,  71,   0}, { 67,  72,  73,   0,   0,   0},{ 67,  72,  79,  78,  71,   0}, { 67,  72,  79,  85,   0,   0},{ 67,  72,  85,   0,   0,   0}, { 67,  72,  85,  65,   0,   0},{ 67,  72,  85,  65,  73,   0}, { 67,  72,  85,  65,  78,   0},{ 67,  72,  85,  65,  78,  71}, { 67,  72,  85,  73,   0,   0},{ 67,  72,  85,  78,   0,   0}, { 67,  72,  85,  79,   0,   0},{ 67,  73,   0,   0,   0,   0}, { 67,  79,  78,  71,   0,   0},{ 67,  79,  85,   0,   0,   0}, { 67,  85,   0,   0,   0,   0},{ 67,  85,  65,  78,   0,   0}, { 67,  85,  73,   0,   0,   0},{ 67,  85,  78,   0,   0,   0}, { 67,  85,  79,   0,   0,   0},{ 68,  65,   0,   0,   0,   0}, { 68,  65,  73,   0,   0,   0},{ 68,  65,  78,   0,   0,   0}, { 68,  65,  78,  71,   0,   0},{ 68,  65,  79,   0,   0,   0}, { 68,  69,   0,   0,   0,   0},{ 68,  69,  78,   0,   0,   0}, { 68,  69,  78,  71,   0,   0},{ 68,  73,   0,   0,   0,   0}, { 68,  73,  65,   0,   0,   0},{ 68,  73,  65,  78,   0,   0}, { 68,  73,  65,  79,   0,   0},{ 68,  73,  69,   0,   0,   0}, { 68,  73,  78,  71,   0,   0},{ 68,  73,  85,   0,   0,   0}, { 68,  79,  78,  71,   0,   0},{ 68,  79,  85,   0,   0,   0}, { 68,  85,   0,   0,   0,   0},{ 68,  85,  65,  78,   0,   0}, { 68,  85,  73,   0,   0,   0},{ 68,  85,  78,   0,   0,   0}, { 68,  85,  79,   0,   0,   0},{ 69,   0,   0,   0,   0,   0}, { 69,  73,   0,   0,   0,   0},{ 69,  78,   0,   0,   0,   0}, { 69,  78,  71,   0,   0,   0},{ 69,  82,   0,   0,   0,   0}, { 70,  65,   0,   0,   0,   0},{ 70,  65,  78,   0,   0,   0}, { 70,  65,  78,  71,   0,   0},{ 70,  69,  73,   0,   0,   0}, { 70,  69,  78,   0,   0,   0},{ 70,  69,  78,  71,   0,   0}, { 70,  73,  65,  79,   0,   0},{ 70,  79,   0,   0,   0,   0}, { 70,  79,  85,   0,   0,   0},{ 70,  85,   0,   0,   0,   0}, { 71,  65,   0,   0,   0,   0},{ 71,  65,  73,   0,   0,   0}, { 71,  65,  78,   0,   0,   0},{ 71,  65,  78,  71,   0,   0}, { 71,  65,  79,   0,   0,   0},{ 71,  69,   0,   0,   0,   0}, { 71,  69,  73,   0,   0,   0},{ 71,  69,  78,   0,   0,   0}, { 71,  69,  78,  71,   0,   0},{ 71,  79,  78,  71,   0,   0}, { 71,  79,  85,   0,   0,   0},{ 71,  85,   0,   0,   0,   0}, { 71,  85,  65,   0,   0,   0},{ 71,  85,  65,  73,   0,   0}, { 71,  85,  65,  78,   0,   0},{ 71,  85,  65,  78,  71,   0}, { 71,  85,  73,   0,   0,   0},{ 71,  85,  78,   0,   0,   0}, { 71,  85,  79,   0,   0,   0},{ 72,  65,   0,   0,   0,   0}, { 72,  65,  73,   0,   0,   0},{ 72,  65,  78,   0,   0,   0}, { 72,  65,  78,  71,   0,   0},{ 72,  65,  79,   0,   0,   0}, { 72,  69,   0,   0,   0,   0},{ 72,  69,  73,   0,   0,   0}, { 72,  69,  78,   0,   0,   0},{ 72,  69,  78,  71,   0,   0}, { 72,  77,   0,   0,   0,   0},{ 72,  79,  78,  71,   0,   0}, { 72,  79,  85,   0,   0,   0},{ 72,  85,   0,   0,   0,   0}, { 72,  85,  65,   0,   0,   0},{ 72,  85,  65,  73,   0,   0}, { 72,  85,  65,  78,   0,   0},{ 72,  85,  65,  78,  71,   0}, { 72,  85,  73,   0,   0,   0},{ 72,  85,  78,   0,   0,   0}, { 72,  85,  79,   0,   0,   0},{ 74,  73,   0,   0,   0,   0}, { 74,  73,  65,   0,   0,   0},{ 74,  73,  65,  78,   0,   0}, { 74,  73,  65,  78,  71,   0},{ 74,  73,  65,  79,   0,   0}, { 74,  73,  69,   0,   0,   0},{ 74,  73,  78,   0,   0,   0}, { 74,  73,  78,  71,   0,   0},{ 74,  73,  79,  78,  71,   0}, { 74,  73,  85,   0,   0,   0},{ 74,  85,   0,   0,   0,   0}, { 74,  85,  65,  78,   0,   0},{ 74,  85,  69,   0,   0,   0}, { 74,  85,  78,   0,   0,   0},{ 75,  65,   0,   0,   0,   0}, { 75,  65,  73,   0,   0,   0},{ 75,  65,  78,   0,   0,   0}, { 75,  65,  78,  71,   0,   0},{ 75,  65,  79,   0,   0,   0}, { 75,  69,   0,   0,   0,   0},{ 75,  69,  78,   0,   0,   0}, { 75,  69,  78,  71,   0,   0},{ 75,  79,  78,  71,   0,   0}, { 75,  79,  85,   0,   0,   0},{ 75,  85,   0,   0,   0,   0}, { 75,  85,  65,   0,   0,   0},{ 75,  85,  65,  73,   0,   0}, { 75,  85,  65,  78,   0,   0},{ 75,  85,  65,  78,  71,   0}, { 75,  85,  73,   0,   0,   0},{ 75,  85,  78,   0,   0,   0}, { 75,  85,  79,   0,   0,   0},{ 76,  65,   0,   0,   0,   0}, { 76,  65,  73,   0,   0,   0},{ 76,  65,  78,   0,   0,   0}, { 76,  65,  78,  71,   0,   0},{ 76,  65,  79,   0,   0,   0}, { 76,  69,   0,   0,   0,   0},{ 76,  69,  73,   0,   0,   0}, { 76,  69,  78,  71,   0,   0},{ 76,  73,   0,   0,   0,   0}, { 76,  73,  65,   0,   0,   0},{ 76,  73,  65,  78,   0,   0}, { 76,  73,  65,  78,  71,   0},{ 76,  73,  65,  79,   0,   0}, { 76,  73,  69,   0,   0,   0},{ 76,  73,  78,   0,   0,   0}, { 76,  73,  78,  71,   0,   0},{ 76,  73,  85,   0,   0,   0}, { 76,  79,   0,   0,   0,   0},{ 76,  79,  78,  71,   0,   0}, { 76,  79,  85,   0,   0,   0},{ 76,  85,   0,   0,   0,   0}, { 76,  85,  65,  78,   0,   0},{ 76,  85,  69,   0,   0,   0}, { 76,  85,  78,   0,   0,   0},{ 76,  85,  79,   0,   0,   0}, { 77,   0,   0,   0,   0,   0},{ 77,  65,   0,   0,   0,   0}, { 77,  65,  73,   0,   0,   0},{ 77,  65,  78,   0,   0,   0}, { 77,  65,  78,  71,   0,   0},{ 77,  65,  79,   0,   0,   0}, { 77,  69,   0,   0,   0,   0},{ 77,  69,  73,   0,   0,   0}, { 77,  69,  78,   0,   0,   0},{ 77,  69,  78,  71,   0,   0}, { 77,  73,   0,   0,   0,   0},{ 77,  73,  65,  78,   0,   0}, { 77,  73,  65,  79,   0,   0},{ 77,  73,  69,   0,   0,   0}, { 77,  73,  78,   0,   0,   0},{ 77,  73,  78,  71,   0,   0}, { 77,  73,  85,   0,   0,   0},{ 77,  79,   0,   0,   0,   0}, { 77,  79,  85,   0,   0,   0},{ 77,  85,   0,   0,   0,   0}, { 78,   0,   0,   0,   0,   0},{ 78,  65,   0,   0,   0,   0}, { 78,  65,  73,   0,   0,   0},{ 78,  65,  78,   0,   0,   0}, { 78,  65,  78,  71,   0,   0},{ 78,  65,  79,   0,   0,   0}, { 78,  69,   0,   0,   0,   0},{ 78,  69,  73,   0,   0,   0}, { 78,  69,  78,   0,   0,   0},{ 78,  69,  78,  71,   0,   0}, { 78,  73,   0,   0,   0,   0},{ 78,  73,  65,  78,   0,   0}, { 78,  73,  65,  78,  71,   0},{ 78,  73,  65,  79,   0,   0}, { 78,  73,  69,   0,   0,   0},{ 78,  73,  78,   0,   0,   0}, { 78,  73,  78,  71,   0,   0},{ 78,  73,  85,   0,   0,   0}, { 78,  79,  78,  71,   0,   0},{ 78,  79,  85,   0,   0,   0}, { 78,  85,   0,   0,   0,   0},{ 78,  85,  65,  78,   0,   0}, { 78,  85,  69,   0,   0,   0},{ 78,  85,  78,   0,   0,   0}, { 78,  85,  79,   0,   0,   0},{ 79,   0,   0,   0,   0,   0}, { 79,  85,   0,   0,   0,   0},{ 80,  65,   0,   0,   0,   0}, { 80,  65,  73,   0,   0,   0},{ 80,  65,  78,   0,   0,   0}, { 80,  65,  78,  71,   0,   0},{ 80,  65,  79,   0,   0,   0}, { 80,  69,  73,   0,   0,   0},{ 80,  69,  78,   0,   0,   0}, { 80,  69,  78,  71,   0,   0},{ 80,  73,   0,   0,   0,   0}, { 80,  73,  65,  78,   0,   0},{ 80,  73,  65,  79,   0,   0}, { 80,  73,  69,   0,   0,   0},{ 80,  73,  78,   0,   0,   0}, { 80,  73,  78,  71,   0,   0},{ 80,  79,   0,   0,   0,   0}, { 80,  79,  85,   0,   0,   0},{ 80,  85,   0,   0,   0,   0}, { 81,  73,   0,   0,   0,   0},{ 81,  73,  65,   0,   0,   0}, { 81,  73,  65,  78,   0,   0},{ 81,  73,  65,  78,  71,   0}, { 81,  73,  65,  79,   0,   0},{ 81,  73,  69,   0,   0,   0}, { 81,  73,  78,   0,   0,   0},{ 81,  73,  78,  71,   0,   0}, { 81,  73,  79,  78,  71,   0},{ 81,  73,  85,   0,   0,   0}, { 81,  85,   0,   0,   0,   0},{ 81,  85,  65,  78,   0,   0}, { 81,  85,  69,   0,   0,   0},{ 81,  85,  78,   0,   0,   0}, { 82,  65,  78,   0,   0,   0},{ 82,  65,  78,  71,   0,   0}, { 82,  65,  79,   0,   0,   0},{ 82,  69,   0,   0,   0,   0}, { 82,  69,  78,   0,   0,   0},{ 82,  69,  78,  71,   0,   0}, { 82,  73,   0,   0,   0,   0},{ 82,  79,  78,  71,   0,   0}, { 82,  79,  85,   0,   0,   0},{ 82,  85,   0,   0,   0,   0}, { 82,  85,  65,   0,   0,   0},{ 82,  85,  65,  78,   0,   0}, { 82,  85,  73,   0,   0,   0},{ 82,  85,  78,   0,   0,   0}, { 82,  85,  79,   0,   0,   0},{ 83,  65,   0,   0,   0,   0}, { 83,  65,  73,   0,   0,   0},{ 83,  65,  78,   0,   0,   0}, { 83,  65,  78,  71,   0,   0},{ 83,  65,  79,   0,   0,   0}, { 83,  69,   0,   0,   0,   0},{ 83,  69,  78,   0,   0,   0}, { 83,  69,  78,  71,   0,   0},{ 83,  72,  65,   0,   0,   0}, { 83,  72,  65,  73,   0,   0},{ 83,  72,  65,  78,   0,   0}, { 83,  72,  65,  78,  71,   0},{ 83,  72,  65,  79,   0,   0}, { 83,  72,  69,   0,   0,   0},{ 83,  72,  69,  78,   0,   0}, { 88,  73,  78,   0,   0,   0},{ 83,  72,  69,  78,   0,   0}, { 83,  72,  69,  78,  71,   0},{ 83,  72,  73,   0,   0,   0}, { 83,  72,  79,  85,   0,   0},{ 83,  72,  85,   0,   0,   0}, { 83,  72,  85,  65,   0,   0},{ 83,  72,  85,  65,  73,   0}, { 83,  72,  85,  65,  78,   0},{ 83,  72,  85,  65,  78,  71}, { 83,  72,  85,  73,   0,   0},{ 83,  72,  85,  78,   0,   0}, { 83,  72,  85,  79,   0,   0},{ 83,  73,   0,   0,   0,   0}, { 83,  79,  78,  71,   0,   0},{ 83,  79,  85,   0,   0,   0}, { 83,  85,   0,   0,   0,   0},{ 83,  85,  65,  78,   0,   0}, { 83,  85,  73,   0,   0,   0},{ 83,  85,  78,   0,   0,   0}, { 83,  85,  79,   0,   0,   0},{ 84,  65,   0,   0,   0,   0}, { 84,  65,  73,   0,   0,   0},{ 84,  65,  78,   0,   0,   0}, { 84,  65,  78,  71,   0,   0},{ 84,  65,  79,   0,   0,   0}, { 84,  69,   0,   0,   0,   0},{ 84,  69,  78,  71,   0,   0}, { 84,  73,   0,   0,   0,   0},{ 84,  73,  65,  78,   0,   0}, { 84,  73,  65,  79,   0,   0},{ 84,  73,  69,   0,   0,   0}, { 84,  73,  78,  71,   0,   0},{ 84,  79,  78,  71,   0,   0}, { 84,  79,  85,   0,   0,   0},{ 84,  85,   0,   0,   0,   0}, { 84,  85,  65,  78,   0,   0},{ 84,  85,  73,   0,   0,   0}, { 84,  85,  78,   0,   0,   0},{ 84,  85,  79,   0,   0,   0}, { 87,  65,   0,   0,   0,   0},{ 87,  65,  73,   0,   0,   0}, { 87,  65,  78,   0,   0,   0},{ 87,  65,  78,  71,   0,   0}, { 87,  69,  73,   0,   0,   0},{ 87,  69,  78,   0,   0,   0}, { 87,  69,  78,  71,   0,   0},{ 87,  79,   0,   0,   0,   0}, { 87,  85,   0,   0,   0,   0},{ 88,  73,   0,   0,   0,   0}, { 88,  73,  65,   0,   0,   0},{ 88,  73,  65,  78,   0,   0}, { 88,  73,  65,  78,  71,   0},{ 88,  73,  65,  79,   0,   0}, { 88,  73,  69,   0,   0,   0},{ 88,  73,  78,   0,   0,   0}, { 88,  73,  78,  71,   0,   0},{ 88,  73,  79,  78,  71,   0}, { 88,  73,  85,   0,   0,   0},{ 88,  85,   0,   0,   0,   0}, { 88,  85,  65,  78,   0,   0},{ 88,  85,  69,   0,   0,   0}, { 88,  85,  78,   0,   0,   0},{ 89,  65,   0,   0,   0,   0}, { 89,  65,  78,   0,   0,   0},{ 89,  65,  78,  71,   0,   0}, { 89,  65,  79,   0,   0,   0},{ 89,  69,   0,   0,   0,   0}, { 89,  73,   0,   0,   0,   0},{ 89,  73,  78,   0,   0,   0}, { 89,  73,  78,  71,   0,   0},{ 89,  79,   0,   0,   0,   0}, { 89,  79,  78,  71,   0,   0},{ 89,  79,  85,   0,   0,   0}, { 89,  85,   0,   0,   0,   0},{ 89,  85,  65,  78,   0,   0}, { 89,  85,  69,   0,   0,   0},{ 89,  85,  78,   0,   0,   0}, { 74,  85,  78,   0,   0,   0},{ 89,  85,  78,   0,   0,   0}, { 90,  65,   0,   0,   0,   0},{ 90,  65,  73,   0,   0,   0}, { 90,  65,  78,   0,   0,   0},{ 90,  65,  78,  71,   0,   0}, { 90,  65,  79,   0,   0,   0},{ 90,  69,   0,   0,   0,   0}, { 90,  69,  73,   0,   0,   0},{ 90,  69,  78,   0,   0,   0}, { 90,  69,  78,  71,   0,   0},{ 90,  72,  65,   0,   0,   0}, { 90,  72,  65,  73,   0,   0},{ 90,  72,  65,  78,   0,   0}, { 90,  72,  65,  78,  71,   0},{ 67,  72,  65,  78,  71,   0}, { 90,  72,  65,  78,  71,   0},{ 90,  72,  65,  79,   0,   0}, { 90,  72,  69,   0,   0,   0},{ 90,  72,  69,  78,   0,   0}, { 90,  72,  69,  78,  71,   0},{ 90,  72,  73,   0,   0,   0}, { 83,  72,  73,   0,   0,   0},{ 90,  72,  73,   0,   0,   0}, { 90,  72,  79,  78,  71,   0},{ 90,  72,  79,  85,   0,   0}, { 90,  72,  85,   0,   0,   0},{ 90,  72,  85,  65,   0,   0}, { 90,  72,  85,  65,  73,   0},{ 90,  72,  85,  65,  78,   0}, { 90,  72,  85,  65,  78,  71},{ 90,  72,  85,  73,   0,   0}, { 90,  72,  85,  78,   0,   0},{ 90,  72,  85,  79,   0,   0}, { 90,  73,   0,   0,   0,   0},{ 90,  79,  78,  71,   0,   0}, { 90,  79,  85,   0,   0,   0},{ 90,  85,   0,   0,   0,   0}, { 90,  85,  65,  78,   0,   0},{ 90,  85,  73,   0,   0,   0}, { 90,  85,  78,   0,   0,   0},{ 90,  85,  79,   0,   0,   0}, {  0,   0,   0,   0,   0,   0},{ 83,  72,  65,  78,   0,   0}, {  0,   0,   0,   0,   0,   0}, };/** First and last Chinese character with known Pinyin according to zh collation */private static final String FIRST_PINYIN_UNIHAN = "\u963F";private static final String LAST_PINYIN_UNIHAN = "\u9FFF";private static final Collator COLLATOR = Collator.getInstance(Locale.CHINA);private static HanziToPinyin sInstance;private final boolean mHasChinaCollator;public static class Token {/*** Separator between target string for each source char*/public static final String SEPARATOR = " ";public static final int LATIN = 1;public static final int PINYIN = 2;public static final int UNKNOWN = 3;public Token() {}public Token(int type, String source, String target) {this.type = type;this.source = source;this.target = target;}/*** Type of this token, ASCII, PINYIN or UNKNOWN.*/public int type;/*** Original string before translation.*/public String source;/*** Translated string of source. For Han, target is corresponding Pinyin. Otherwise target is* original string in source.*/public String target;}protected HanziToPinyin(boolean hasChinaCollator) {mHasChinaCollator = hasChinaCollator;}public static HanziToPinyin getInstance() {synchronized (HanziToPinyin.class) {if (sInstance != null) {return sInstance;}// Check if zh_CN collation data is availablefinal Locale locale[] = Collator.getAvailableLocales();for (int i = 0; i < locale.length; i++) {if (locale[i].equals(Locale.CHINA)) {// Do self validation just once.if (DEBUG) {Log.d(TAG, "Self validation. Result: " + doSelfValidation());}sInstance = new HanziToPinyin(true);return sInstance;}}Log.w(TAG, "There is no Chinese collator, HanziToPinyin is disabled");sInstance = new HanziToPinyin(false);return sInstance;}}/*** Validate if our internal table has some wrong value.** @return true when the table looks correct.*/private static boolean doSelfValidation() {char lastChar = UNIHANS[0];String lastString = Character.toString(lastChar);for (char c : UNIHANS) {if (lastChar == c) {continue;}final String curString = Character.toString(c);int cmp = COLLATOR.compare(lastString, curString);if (cmp >= 0) {Log.e(TAG, "Internal error in Unihan table. " + "The last string \"" + lastString+ "\" is greater than current string \"" + curString + "\".");return false;}lastString = curString;}return true;}private Token getToken(char character) {Token token = new Token();final String letter = Character.toString(character);token.source = letter;int offset = -1;int cmp;if (character < 256) {token.type = Token.LATIN;token.target = letter;return token;} else {cmp = COLLATOR.compare(letter, FIRST_PINYIN_UNIHAN);if (cmp < 0) {token.type = Token.UNKNOWN;token.target = letter;return token;} else if (cmp == 0) {token.type = Token.PINYIN;offset = 0;} else {cmp = COLLATOR.compare(letter, LAST_PINYIN_UNIHAN);if (cmp > 0) {token.type = Token.UNKNOWN;token.target = letter;return token;} else if (cmp == 0) {token.type = Token.PINYIN;offset = UNIHANS.length - 1;}}}token.type = Token.PINYIN;if (offset < 0) {int begin = 0;int end = UNIHANS.length - 1;while (begin <= end) {offset = (begin + end) / 2;final String unihan = Character.toString(UNIHANS[offset]);cmp = COLLATOR.compare(letter, unihan);if (cmp == 0) {break;} else if (cmp > 0) {begin = offset + 1;} else {end = offset - 1;}}}if (cmp < 0) {offset--;}StringBuilder pinyin = new StringBuilder();for (int j = 0; j < PINYINS[offset].length && PINYINS[offset][j] != 0; j++) {pinyin.append((char) PINYINS[offset][j]);}token.target = pinyin.toString();if (TextUtils.isEmpty(token.target)) {token.type = Token.UNKNOWN;token.target = token.source;}return token;}/*** Convert the input to a array of tokens. The sequence of ASCII or Unknown characters without* space will be put into a Token, One Hanzi character which has pinyin will be treated as a* Token. If these is no China collator, the empty token array is returned.*/public ArrayList<Token> get(final String input) {ArrayList<Token> tokens = new ArrayList<Token>();if (!mHasChinaCollator || TextUtils.isEmpty(input)) {// return empty tokens.return tokens;}final int inputLength = input.length();final StringBuilder sb = new StringBuilder();int tokenType = Token.LATIN;// Go through the input, create a new token when// a. Token type changed// b. Get the Pinyin of current charater.// c. current character is space.for (int i = 0; i < inputLength; i++) {final char character = input.charAt(i);if (character == ' ') {if (sb.length() > 0) {addToken(sb, tokens, tokenType);}} else if (character < 256) {if (tokenType != Token.LATIN && sb.length() > 0) {addToken(sb, tokens, tokenType);}tokenType = Token.LATIN;sb.append(character);} else {Token t = getToken(character);if (t.type == Token.PINYIN) {if (sb.length() > 0) {addToken(sb, tokens, tokenType);}tokens.add(t);tokenType = Token.PINYIN;} else {if (tokenType != t.type && sb.length() > 0) {addToken(sb, tokens, tokenType);}tokenType = t.type;sb.append(character);}}}if (sb.length() > 0) {addToken(sb, tokens, tokenType);}return tokens;}private void addToken(final StringBuilder sb, final ArrayList<Token> tokens, final int tokenType) {String str = sb.toString();tokens.add(new Token(tokenType, str, str));sb.setLength(0);}
}

这个工具类用于将汉字转换为拼音,通过一个Token对象来存储转换过后的拼音和转换之前的字符串。

下面定义一个方法获取输入字符串获取全拼
[java] view plain copy print ?
  1. package com.suntek.mobilemeeting.utils;
  2. import java.util.ArrayList;
  3. import com.suntek.mobilemeeting.utils.HanziToPinyin.Token;
  4. /**
  5. * 获取汉字拼音
  6. *
  7. * @author 佚名
  8. *
  9. */
  10. public class PinYin {
  11. public static String getPinYin(String input) {
  12. ArrayList<Token> tokens = HanziToPinyin.getInstance().get(input);
  13. StringBuilder sb = new StringBuilder();
  14. if (tokens != null && tokens.size() > 0) {
  15. for (Token token : tokens) {
  16. if (Token.PINYIN == token.type) {
  17. sb.append(token.target);
  18. } else {
  19. sb.append(token.source);
  20. }
  21. }
  22. }
  23. return sb.toString().toLowerCase();
  24. }
  25. }
package com.suntek.mobilemeeting.utils;import java.util.ArrayList;import com.suntek.mobilemeeting.utils.HanziToPinyin.Token;/*** 获取汉字拼音* * @author 佚名* */
public class PinYin {public static String getPinYin(String input) {ArrayList<Token> tokens = HanziToPinyin.getInstance().get(input);StringBuilder sb = new StringBuilder();if (tokens != null && tokens.size() > 0) {for (Token token : tokens) {if (Token.PINYIN == token.type) {sb.append(token.target);} else {sb.append(token.source);}}}return sb.toString().toLowerCase();}
}

上面是实现获取全拼的实现,下面是获取中文简拼的实现

[java] view plain copy print ?
  1. package com.suntek.mobilemeeting.utils;
  2. /**
  3. * 根据 GBK 汉字的 UNICODE 编码取得汉字的首字母
  4. *
  5. * @author zrq
  6. *
  7. */
  8. public class UnicodeGBK2Alpha {
  9. private final static String GBK2UNICODE = "YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSCYYYNJQYXXGJ"
  10. + "HHSDSJNKKTMOMLCRXYPSNQSECCQZGGLLYJLMYZZSECYKYYHQWJSSGGYXYZYJWWKDJHYCHMYXJTLXJYQBYXZLDWRDJRWYSRLDZJPC"
  11. + "BZJJBRCFTLECZSTZFXXZHTRQHYBDLYCZSSYMMRFMYQZPWWJJYFCRWFDFZQPYDDWYXKYJAWJFFXYPSFTZYHHYZYSWCJYXSCLCXXWZ"
  12. + "ZXNBGNNXBXLZSZSBSGPYSYZDHMDZBQBZCWDZZYYTZHBTSYYBZGNTNXQYWQSKBPHHLXGYBFMJEBJHHGQTJCYSXSTKZHLYCKGLYSMZ"
  13. + "XYALMELDCCXGZYRJXSDLTYZCQKCNNJWHJTZZCQLJSTSTBNXBTYXCEQXGKWJYFLZQLYHYXSPSFXLMPBYSXXXYDJCZYLLLSJXFHJXP"
  14. + "JBTFFYABYXBHZZBJYZLWLCZGGBTSSMDTJZXPTHYQTGLJSCQFZKJZJQNLZWLSLHDZBWJNCJZYZSQQYCQYRZCJJWYBRTWPYFTWEXCS"
  15. + "KDZCTBZHYZZYYJXZCFFZZMJYXXSDZZOTTBZLQWFCKSZSXFYRLNYJMBDTHJXSQQCCSBXYYTSYFBXDZTGBCNSLCYZZPSAZYZZSCJCS"
  16. + "HZQYDXLBPJLLMQXTYDZXSQJTZPXLCGLQTZWJBHCTSYJSFXYEJJTLBGXSXJMYJQQPFZASYJNTYDJXKJCDJSZCBARTDCLYJQMWNQNC"
  17. + "LLLKBYBZZSYHQQLTWLCCXTXLLZNTYLNEWYZYXCZXXGRKRMTCNDNJTSYYSSDQDGHSDBJGHRWRQLYBGLXHLGTGXBQJDZPYJSJYJCTM"
  18. + "RNYMGRZJCZGJMZMGXMPRYXKJNYMSGMZJYMKMFXMLDTGFBHCJHKYLPFMDXLQJJSMTQGZSJLQDLDGJYCALCMZCSDJLLNXDJFFFFJCZ"
  19. + "FMZFFPFKHKGDPSXKTACJDHHZDDCRRCFQYJKQCCWJDXHWJLYLLZGCFCQDSMLZPBJJPLSBCJGGDCKKDEZSQCCKJGCGKDJTJDLZYCXK"
  20. + "LQSCGJCLTFPCQCZGWPJDQYZJJBYJHSJDZWGFSJGZKQCCZLLPSPKJGQJHZZLJPLGJGJJTHJJYJZCZMLZLYQBGJWMLJKXZDZNJQSYZ"
  21. + "MLJLLJKYWXMKJLHSKJGBMCLYYMKXJQLBMLLKMDXXKWYXYSLMLPSJQQJQXYXFJTJDXMXXLLCXQBSYJBGWYMBGGBCYXPJYGPEPFGDJ"
  22. + "GBHBNSQJYZJKJKHXQFGQZKFHYGKHDKLLSDJQXPQYKYBNQSXQNSZSWHBSXWHXWBZZXDMNSJBSBKBBZKLYLXGWXDRWYQZMYWSJQLCJ"
  23. + "XXJXKJEQXSCYETLZHLYYYSDZPAQYZCMTLSHTZCFYZYXYLJSDCJQAGYSLCQLYYYSHMRQQKLDXZSCSSSYDYCJYSFSJBFRSSZQSBXXP"
  24. + "XJYSDRCKGJLGDKZJZBDKTCSYQPYHSTCLDJDHMXMCGXYZHJDDTMHLTXZXYLYMOHYJCLTYFBQQXPFBDFHHTKSQHZYYWCNXXCRWHOWG"
  25. + "YJLEGWDQCWGFJYCSNTMYTOLBYGWQWESJPWNMLRYDZSZTXYQPZGCWXHNGPYXSHMYQJXZTDPPBFYHZHTJYFDZWKGKZBLDNTSXHQEEG"
  26. + "ZZYLZMMZYJZGXZXKHKSTXNXXWYLYAPSTHXDWHZYMPXAGKYDXBHNHXKDPJNMYHYLPMGOCSLNZHKXXLPZZLBMLSFBHHGYGYYGGBHSC"
  27. + "YAQTYWLXTZQCEZYDQDQMMHTKLLSZHLSJZWFYHQSWSCWLQAZYNYTLSXTHAZNKZZSZZLAXXZWWCTGQQTDDYZTCCHYQZFLXPSLZYGPZ"
  28. + "SZNGLNDQTBDLXGTCTAJDKYWNSYZLJHHZZCWNYYZYWMHYCHHYXHJKZWSXHZYXLYSKQYSPSLYZWMYPPKBYGLKZHTYXAXQSYSHXASMC"
  29. + "HKDSCRSWJPWXSGZJLWWSCHSJHSQNHCSEGNDAQTBAALZZMSSTDQJCJKTSCJAXPLGGXHHGXXZCXPDMMHLDGTYBYSJMXHMRCPXXJZCK"
  30. + "ZXSHMLQXXTTHXWZFKHCCZDYTCJYXQHLXDHYPJQXYLSYYDZOZJNYXQEZYSQYAYXWYPDGXDDXSPPYZNDLTWRHXYDXZZJHTCXMCZLHP"
  31. + "YYYYMHZLLHNXMYLLLMDCPPXHMXDKYCYRDLTXJCHHZZXZLCCLYLNZSHZJZZLNNRLWHYQSNJHXYNTTTKYJPYCHHYEGKCTTWLGQRLGG"
  32. + "TGTYGYHPYHYLQYQGCWYQKPYYYTTTTLHYHLLTYTTSPLKYZXGZWGPYDSSZZDQXSKCQNMJJZZBXYQMJRTFFBTKHZKBXLJJKDXJTLBWF"
  33. + "ZPPTKQTZTGPDGNTPJYFALQMKGXBDCLZFHZCLLLLADPMXDJHLCCLGYHDZFGYDDGCYYFGYDXKSSEBDHYKDKDKHNAXXYBPBYYHXZQGA"
  34. + "FFQYJXDMLJCSQZLLPCHBSXGJYNDYBYQSPZWJLZKSDDTACTBXZDYZYPJZQSJNKKTKNJDJGYYPGTLFYQKASDNTCYHBLWDZHBBYDWJR"
  35. + "YGKZYHEYYFJMSDTYFZJJHGCXPLXHLDWXXJKYTCYKSSSMTWCTTQZLPBSZDZWZXGZAGYKTYWXLHLSPBCLLOQMMZSSLCMBJCSZZKYDC"
  36. + "ZJGQQDSMCYTZQQLWZQZXSSFPTTFQMDDZDSHDTDWFHTDYZJYQJQKYPBDJYYXTLJHDRQXXXHAYDHRJLKLYTWHLLRLLRCXYLBWSRSZZ"
  37. + "SYMKZZHHKYHXKSMDSYDYCJPBZBSQLFCXXXNXKXWYWSDZYQOGGQMMYHCDZTTFJYYBGSTTTYBYKJDHKYXBELHTYPJQNFXFDYKZHQKZ"
  38. + "BYJTZBXHFDXKDASWTAWAJLDYJSFHBLDNNTNQJTJNCHXFJSRFWHZFMDRYJYJWZPDJKZYJYMPCYZNYNXFBYTFYFWYGDBNZZZDNYTXZ"
  39. + "EMMQBSQEHXFZMBMFLZZSRXYMJGSXWZJSPRYDJSJGXHJJGLJJYNZZJXHGXKYMLPYYYCXYTWQZSWHWLYRJLPXSLSXMFSWWKLCTNXNY"
  40. + "NPSJSZHDZEPTXMYYWXYYSYWLXJQZQXZDCLEEELMCPJPCLWBXSQHFWWTFFJTNQJHJQDXHWLBYZNFJLALKYYJLDXHHYCSTYYWNRJYX"
  41. + "YWTRMDRQHWQCMFJDYZMHMYYXJWMYZQZXTLMRSPWWCHAQBXYGZYPXYYRRCLMPYMGKSJSZYSRMYJSNXTPLNBAPPYPYLXYYZKYNLDZY"
  42. + "JZCZNNLMZHHARQMPGWQTZMXXMLLHGDZXYHXKYXYCJMFFYYHJFSBSSQLXXNDYCANNMTCJCYPRRNYTYQNYYMBMSXNDLYLYSLJRLXYS"
  43. + "XQMLLYZLZJJJKYZZCSFBZXXMSTBJGNXYZHLXNMCWSCYZYFZLXBRNNNYLBNRTGZQYSATSWRYHYJZMZDHZGZDWYBSSCSKXSYHYTXXG"
  44. + "CQGXZZSHYXJSCRHMKKBXCZJYJYMKQHZJFNBHMQHYSNJNZYBKNQMCLGQHWLZNZSWXKHLJHYYBQLBFCDSXDLDSPFZPSKJYZWZXZDDX"
  45. + "JSMMEGJSCSSMGCLXXKYYYLNYPWWWGYDKZJGGGZGGSYCKNJWNJPCXBJJTQTJWDSSPJXZXNZXUMELPXFSXTLLXCLJXJJLJZXCTPSWX"
  46. + "LYDHLYQRWHSYCSQYYBYAYWJJJQFWQCQQCJQGXALDBZZYJGKGXPLTZYFXJLTPADKYQHPMATLCPDCKBMTXYBHKLENXDLEEGQDYMSAW"
  47. + "HZMLJTWYGXLYQZLJEEYYBQQFFNLYXRDSCTGJGXYYNKLLYQKCCTLHJLQMKKZGCYYGLLLJDZGYDHZWXPYSJBZKDZGYZZHYWYFQYTYZ"
  48. + "SZYEZZLYMHJJHTSMQWYZLKYYWZCSRKQYTLTDXWCTYJKLWSQZWBDCQYNCJSRSZJLKCDCDTLZZZACQQZZDDXYPLXZBQJYLZLLLQDDZ"
  49. + "QJYJYJZYXNYYYNYJXKXDAZWYRDLJYYYRJLXLLDYXJCYWYWNQCCLDDNYYYNYCKCZHXXCCLGZQJGKWPPCQQJYSBZZXYJSQPXJPZBSB"
  50. + "DSFNSFPZXHDWZTDWPPTFLZZBZDMYYPQJRSDZSQZSQXBDGCPZSWDWCSQZGMDHZXMWWFYBPDGPHTMJTHZSMMBGZMBZJCFZWFZBBZMQ"
  51. + "CFMBDMCJXLGPNJBBXGYHYYJGPTZGZMQBQTCGYXJXLWZKYDPDYMGCFTPFXYZTZXDZXTGKMTYBBCLBJASKYTSSQYYMSZXFJEWLXLLS"
  52. + "ZBQJJJAKLYLXLYCCTSXMCWFKKKBSXLLLLJYXTYLTJYYTDPJHNHNNKBYQNFQYYZBYYESSESSGDYHFHWTCJBSDZZTFDMXHCNJZYMQW"
  53. + "SRYJDZJQPDQBBSTJGGFBKJBXTGQHNGWJXJGDLLTHZHHYYYYYYSXWTYYYCCBDBPYPZYCCZYJPZYWCBDLFWZCWJDXXHYHLHWZZXJTC"
  54. + "ZLCDPXUJCZZZLYXJJTXPHFXWPYWXZPTDZZBDZCYHJHMLXBQXSBYLRDTGJRRCTTTHYTCZWMXFYTWWZCWJWXJYWCSKYBZSCCTZQNHX"
  55. + "NWXXKHKFHTSWOCCJYBCMPZZYKBNNZPBZHHZDLSYDDYTYFJPXYNGFXBYQXCBHXCPSXTYZDMKYSNXSXLHKMZXLYHDHKWHXXSSKQYHH"
  56. + "CJYXGLHZXCSNHEKDTGZXQYPKDHEXTYKCNYMYYYPKQYYYKXZLTHJQTBYQHXBMYHSQCKWWYLLHCYYLNNEQXQWMCFBDCCMLJGGXDQKT"
  57. + "LXKGNQCDGZJWYJJLYHHQTTTNWCHMXCXWHWSZJYDJCCDBQCDGDNYXZTHCQRXCBHZTQCBXWGQWYYBXHMBYMYQTYEXMQKYAQYRGYZSL"
  58. + "FYKKQHYSSQYSHJGJCNXKZYCXSBXYXHYYLSTYCXQTHYSMGSCPMMGCCCCCMTZTASMGQZJHKLOSQYLSWTMXSYQKDZLJQQYPLSYCZTCQ"
  59. + "QPBBQJZCLPKHQZYYXXDTDDTSJCXFFLLCHQXMJLWCJCXTSPYCXNDTJSHJWXDQQJSKXYAMYLSJHMLALYKXCYYDMNMDQMXMCZNNCYBZ"
  60. + "KKYFLMCHCMLHXRCJJHSYLNMTJZGZGYWJXSRXCWJGJQHQZDQJDCJJZKJKGDZQGJJYJYLXZXXCDQHHHEYTMHLFSBDJSYYSHFYSTCZQ"
  61. + "LPBDRFRZTZYKYWHSZYQKWDQZRKMSYNBCRXQBJYFAZPZZEDZCJYWBCJWHYJBQSZYWRYSZPTDKZPFPBNZTKLQYHBBZPNPPTYZZYBQN"
  62. + "YDCPJMMCYCQMCYFZZDCMNLFPBPLNGQJTBTTNJZPZBBZNJKLJQYLNBZQHKSJZNGGQSZZKYXSHPZSNBCGZKDDZQANZHJKDRTLZLSWJ"
  63. + "LJZLYWTJNDJZJHXYAYNCBGTZCSSQMNJPJYTYSWXZFKWJQTKHTZPLBHSNJZSYZBWZZZZLSYLSBJHDWWQPSLMMFBJDWAQYZTCJTBNN"
  64. + "WZXQXCDSLQGDSDPDZHJTQQPSWLYYJZLGYXYZLCTCBJTKTYCZJTQKBSJLGMGZDMCSGPYNJZYQYYKNXRPWSZXMTNCSZZYXYBYHYZAX"
  65. + "YWQCJTLLCKJJTJHGDXDXYQYZZBYWDLWQCGLZGJGQRQZCZSSBCRPCSKYDZNXJSQGXSSJMYDNSTZTPBDLTKZWXQWQTZEXNQCZGWEZK"
  66. + "SSBYBRTSSSLCCGBPSZQSZLCCGLLLZXHZQTHCZMQGYZQZNMCOCSZJMMZSQPJYGQLJYJPPLDXRGZYXCCSXHSHGTZNLZWZKJCXTCFCJ"
  67. + "XLBMQBCZZWPQDNHXLJCTHYZLGYLNLSZZPCXDSCQQHJQKSXZPBAJYEMSMJTZDXLCJYRYYNWJBNGZZTMJXLTBSLYRZPYLSSCNXPHLL"
  68. + "HYLLQQZQLXYMRSYCXZLMMCZLTZSDWTJJLLNZGGQXPFSKYGYGHBFZPDKMWGHCXMSGDXJMCJZDYCABXJDLNBCDQYGSKYDQTXDJJYXM"
  69. + "SZQAZDZFSLQXYJSJZYLBTXXWXQQZBJZUFBBLYLWDSLJHXJYZJWTDJCZFQZQZZDZSXZZQLZCDZFJHYSPYMPQZMLPPLFFXJJNZZYLS"
  70. + "JEYQZFPFZKSYWJJJHRDJZZXTXXGLGHYDXCSKYSWMMZCWYBAZBJKSHFHJCXMHFQHYXXYZFTSJYZFXYXPZLCHMZMBXHZZSXYFYMNCW"
  71. + "DABAZLXKTCSHHXKXJJZJSTHYGXSXYYHHHJWXKZXSSBZZWHHHCWTZZZPJXSNXQQJGZYZYWLLCWXZFXXYXYHXMKYYSWSQMNLNAYCYS"
  72. + "PMJKHWCQHYLAJJMZXHMMCNZHBHXCLXTJPLTXYJHDYYLTTXFSZHYXXSJBJYAYRSMXYPLCKDUYHLXRLNLLSTYZYYQYGYHHSCCSMZCT"
  73. + "ZQXKYQFPYYRPFFLKQUNTSZLLZMWWTCQQYZWTLLMLMPWMBZSSTZRBPDDTLQJJBXZCSRZQQYGWCSXFWZLXCCRSZDZMCYGGDZQSGTJS"
  74. + "WLJMYMMZYHFBJDGYXCCPSHXNZCSBSJYJGJMPPWAFFYFNXHYZXZYLREMZGZCYZSSZDLLJCSQFNXZKPTXZGXJJGFMYYYSNBTYLBNLH"
  75. + "PFZDCYFBMGQRRSSSZXYSGTZRNYDZZCDGPJAFJFZKNZBLCZSZPSGCYCJSZLMLRSZBZZLDLSLLYSXSQZQLYXZLSKKBRXBRBZCYCXZZ"
  76. + "ZEEYFGKLZLYYHGZSGZLFJHGTGWKRAAJYZKZQTSSHJJXDCYZUYJLZYRZDQQHGJZXSSZBYKJPBFRTJXLLFQWJHYLQTYMBLPZDXTZYG"
  77. + "BDHZZRBGXHWNJTJXLKSCFSMWLSDQYSJTXKZSCFWJLBXFTZLLJZLLQBLSQMQQCGCZFPBPHZCZJLPYYGGDTGWDCFCZQYYYQYSSCLXZ"
  78. + "SKLZZZGFFCQNWGLHQYZJJCZLQZZYJPJZZBPDCCMHJGXDQDGDLZQMFGPSYTSDYFWWDJZJYSXYYCZCYHZWPBYKXRYLYBHKJKSFXTZJ"
  79. + "MMCKHLLTNYYMSYXYZPYJQYCSYCWMTJJKQYRHLLQXPSGTLYYCLJSCPXJYZFNMLRGJJTYZBXYZMSJYJHHFZQMSYXRSZCWTLRTQZSST"
  80. + "KXGQKGSPTGCZNJSJCQCXHMXGGZTQYDJKZDLBZSXJLHYQGGGTHQSZPYHJHHGYYGKGGCWJZZYLCZLXQSFTGZSLLLMLJSKCTBLLZZSZ"
  81. + "MMNYTPZSXQHJCJYQXYZXZQZCPSHKZZYSXCDFGMWQRLLQXRFZTLYSTCTMJCXJJXHJNXTNRZTZFQYHQGLLGCXSZSJDJLJCYDSJTLNY"
  82. + "XHSZXCGJZYQPYLFHDJSBPCCZHJJJQZJQDYBSSLLCMYTTMQTBHJQNNYGKYRQYQMZGCJKPDCGMYZHQLLSLLCLMHOLZGDYYFZSLJCQZ"
  83. + "LYLZQJESHNYLLJXGJXLYSYYYXNBZLJSSZCQQCJYLLZLTJYLLZLLBNYLGQCHXYYXOXCXQKYJXXXYKLXSXXYQXCYKQXQCSGYXXYQXY"
  84. + "GYTQOHXHXPYXXXULCYEYCHZZCBWQBBWJQZSCSZSSLZYLKDESJZWMYMCYTSDSXXSCJPQQSQYLYYZYCMDJDZYWCBTJSYDJKCYDDJLB"
  85. + "DJJSODZYSYXQQYXDHHGQQYQHDYXWGMMMAJDYBBBPPBCMUUPLJZSMTXERXJMHQNUTPJDCBSSMSSSTKJTSSMMTRCPLZSZMLQDSDMJM"
  86. + "QPNQDXCFYNBFSDQXYXHYAYKQYDDLQYYYSSZBYDSLNTFQTZQPZMCHDHCZCWFDXTMYQSPHQYYXSRGJCWTJTZZQMGWJJTJHTQJBBHWZ"
  87. + "PXXHYQFXXQYWYYHYSCDYDHHQMNMTMWCPBSZPPZZGLMZFOLLCFWHMMSJZTTDHZZYFFYTZZGZYSKYJXQYJZQBHMBZZLYGHGFMSHPZF"
  88. + "ZSNCLPBQSNJXZSLXXFPMTYJYGBXLLDLXPZJYZJYHHZCYWHJYLSJEXFSZZYWXKZJLUYDTMLYMQJPWXYHXSKTQJEZRPXXZHHMHWQPW"
  89. + "QLYJJQJJZSZCPHJLCHHNXJLQWZJHBMZYXBDHHYPZLHLHLGFWLCHYYTLHJXCJMSCPXSTKPNHQXSRTYXXTESYJCTLSSLSTDLLLWWYH"
  90. + "DHRJZSFGXTSYCZYNYHTDHWJSLHTZDQDJZXXQHGYLTZPHCSQFCLNJTCLZPFSTPDYNYLGMJLLYCQHYSSHCHYLHQYQTMZYPBYWRFQYK"
  91. + "QSYSLZDQJMPXYYSSRHZJNYWTQDFZBWWTWWRXCWHGYHXMKMYYYQMSMZHNGCEPMLQQMTCWCTMMPXJPJJHFXYYZSXZHTYBMSTSYJTTQ"
  92. + "QQYYLHYNPYQZLCYZHZWSMYLKFJXLWGXYPJYTYSYXYMZCKTTWLKSMZSYLMPWLZWXWQZSSAQSYXYRHSSNTSRAPXCPWCMGDXHXZDZYF"
  93. + "JHGZTTSBJHGYZSZYSMYCLLLXBTYXHBBZJKSSDMALXHYCFYGMQYPJYCQXJLLLJGSLZGQLYCJCCZOTYXMTMTTLLWTGPXYMZMKLPSZZ"
  94. + "ZXHKQYSXCTYJZYHXSHYXZKXLZWPSQPYHJWPJPWXQQYLXSDHMRSLZZYZWTTCYXYSZZSHBSCCSTPLWSSCJCHNLCGCHSSPHYLHFHHXJ"
  95. + "SXYLLNYLSZDHZXYLSXLWZYKCLDYAXZCMDDYSPJTQJZLNWQPSSSWCTSTSZLBLNXSMNYYMJQBQHRZWTYYDCHQLXKPZWBGQYBKFCMZW"
  96. + "PZLLYYLSZYDWHXPSBCMLJBSCGBHXLQHYRLJXYSWXWXZSLDFHLSLYNJLZYFLYJYCDRJLFSYZFSLLCQYQFGJYHYXZLYLMSTDJCYHBZ"
  97. + "LLNWLXXYGYYHSMGDHXXHHLZZJZXCZZZCYQZFNGWPYLCPKPYYPMCLQKDGXZGGWQBDXZZKZFBXXLZXJTPJPTTBYTSZZDWSLCHZHSLT"
  98. + "YXHQLHYXXXYYZYSWTXZKHLXZXZPYHGCHKCFSYHUTJRLXFJXPTZTWHPLYXFCRHXSHXKYXXYHZQDXQWULHYHMJTBFLKHTXCWHJFWJC"
  99. + "FPQRYQXCYYYQYGRPYWSGSUNGWCHKZDXYFLXXHJJBYZWTSXXNCYJJYMSWZJQRMHXZWFQSYLZJZGBHYNSLBGTTCSYBYXXWXYHXYYXN"
  100. + "SQYXMQYWRGYQLXBBZLJSYLPSYTJZYHYZAWLRORJMKSCZJXXXYXCHDYXRYXXJDTSQFXLYLTSFFYXLMTYJMJUYYYXLTZCSXQZQHZXL"
  101. + "YYXZHDNBRXXXJCTYHLBRLMBRLLAXKYLLLJLYXXLYCRYLCJTGJCMTLZLLCYZZPZPCYAWHJJFYBDYYZSMPCKZDQYQPBPCJPDCYZMDP"
  102. + "BCYYDYCNNPLMTMLRMFMMGWYZBSJGYGSMZQQQZTXMKQWGXLLPJGZBQCDJJJFPKJKCXBLJMSWMDTQJXLDLPPBXCWRCQFBFQJCZAHZG"
  103. + "MYKPHYYHZYKNDKZMBPJYXPXYHLFPNYYGXJDBKXNXHJMZJXSTRSTLDXSKZYSYBZXJLXYSLBZYSLHXJPFXPQNBYLLJQKYGZMCYZZYM"
  104. + "CCSLCLHZFWFWYXZMWSXTYNXJHPYYMCYSPMHYSMYDYSHQYZCHMJJMZCAAGCFJBBHPLYZYLXXSDJGXDHKXXTXXNBHRMLYJSLTXMRHN"
  105. + "LXQJXYZLLYSWQGDLBJHDCGJYQYCMHWFMJYBMBYJYJWYMDPWHXQLDYGPDFXXBCGJSPCKRSSYZJMSLBZZJFLJJJLGXZGYXYXLSZQYX"
  106. + "BEXYXHGCXBPLDYHWETTWWCJMBTXCHXYQXLLXFLYXLLJLSSFWDPZSMYJCLMWYTCZPCHQEKCQBWLCQYDPLQPPQZQFJQDJHYMMCXTXD"
  107. + "RMJWRHXCJZYLQXDYYNHYYHRSLSRSYWWZJYMTLTLLGTQCJZYABTCKZCJYCCQLJZQXALMZYHYWLWDXZXQDLLQSHGPJFJLJHJABCQZD"
  108. + "JGTKHSSTCYJLPSWZLXZXRWGLDLZRLZXTGSLLLLZLYXXWGDZYGBDPHZPBRLWSXQBPFDWOFMWHLYPCBJCCLDMBZPBZZLCYQXLDOMZB"
  109. + "LZWPDWYYGDSTTHCSQSCCRSSSYSLFYBFNTYJSZDFNDPDHDZZMBBLSLCMYFFGTJJQWFTMTPJWFNLBZCMMJTGBDZLQLPYFHYYMJYLSD"
  110. + "CHDZJWJCCTLJCLDTLJJCPDDSQDSSZYBNDBJLGGJZXSXNLYCYBJXQYCBYLZCFZPPGKCXZDZFZTJJFJSJXZBNZYJQTTYJYHTYCZHYM"
  111. + "DJXTTMPXSPLZCDWSLSHXYPZGTFMLCJTYCBPMGDKWYCYZCDSZZYHFLYCTYGWHKJYYLSJCXGYWJCBLLCSNDDBTZBSCLYZCZZSSQDLL"
  112. + "MQYYHFSLQLLXFTYHABXGWNYWYYPLLSDLDLLBJCYXJZMLHLJDXYYQYTDLLLBUGBFDFBBQJZZMDPJHGCLGMJJPGAEHHBWCQXAXHHHZ"
  113. + "CHXYPHJAXHLPHJPGPZJQCQZGJJZZUZDMQYYBZZPHYHYBWHAZYJHYKFGDPFQSDLZMLJXKXGALXZDAGLMDGXMWZQYXXDXXPFDMMSSY"
  114. + "MPFMDMMKXKSYZYSHDZKXSYSMMZZZMSYDNZZCZXFPLSTMZDNMXCKJMZTYYMZMZZMSXHHDCZJEMXXKLJSTLWLSQLYJZLLZJSSDPPMH"
  115. + "NLZJCZYHMXXHGZCJMDHXTKGRMXFWMCGMWKDTKSXQMMMFZZYDKMSCLCMPCGMHSPXQPZDSSLCXKYXTWLWJYAHZJGZQMCSNXYYMMPML"
  116. + "KJXMHLMLQMXCTKZMJQYSZJSYSZHSYJZJCDAJZYBSDQJZGWZQQXFKDMSDJLFWEHKZQKJPEYPZYSZCDWYJFFMZZYLTTDZZEFMZLBNP"
  117. + "PLPLPEPSZALLTYLKCKQZKGENQLWAGYXYDPXLHSXQQWQCQXQCLHYXXMLYCCWLYMQYSKGCHLCJNSZKPYZKCQZQLJPDMDZHLASXLBYD"
  118. + "WQLWDNBQCRYDDZTJYBKBWSZDXDTNPJDTCTQDFXQQMGNXECLTTBKPWSLCTYQLPWYZZKLPYGZCQQPLLKCCYLPQMZCZQCLJSLQZDJXL"
  119. + "DDHPZQDLJJXZQDXYZQKZLJCYQDYJPPYPQYKJYRMPCBYMCXKLLZLLFQPYLLLMBSGLCYSSLRSYSQTMXYXZQZFDZUYSYZTFFMZZSMZQ"
  120. + "HZSSCCMLYXWTPZGXZJGZGSJSGKDDHTQGGZLLBJDZLCBCHYXYZHZFYWXYZYMSDBZZYJGTSMTFXQYXQSTDGSLNXDLRYZZLRYYLXQHT"
  121. + "XSRTZNGZXBNQQZFMYKMZJBZYMKBPNLYZPBLMCNQYZZZSJZHJCTZKHYZZJRDYZHNPXGLFZTLKGJTCTSSYLLGZRZBBQZZKLPKLCZYS"
  122. + "SUYXBJFPNJZZXCDWXZYJXZZDJJKGGRSRJKMSMZJLSJYWQSKYHQJSXPJZZZLSNSHRNYPZTWCHKLPSRZLZXYJQXQKYSJYCZTLQZYBB"
  123. + "YBWZPQDWWYZCYTJCJXCKCWDKKZXSGKDZXWWYYJQYYTCYTDLLXWKCZKKLCCLZCQQDZLQLCSFQCHQHSFSMQZZLNBJJZBSJHTSZDYSJ"
  124. + "QJPDLZCDCWJKJZZLPYCGMZWDJJBSJQZSYZYHHXJPBJYDSSXDZNCGLQMBTSFSBPDZDLZNFGFJGFSMPXJQLMBLGQCYYXBQKDJJQYRF"
  125. + "KZTJDHCZKLBSDZCFJTPLLJGXHYXZCSSZZXSTJYGKGCKGYOQXJPLZPBPGTGYJZGHZQZZLBJLSQFZGKQQJZGYCZBZQTLDXRJXBSXXP"
  126. + "ZXHYZYCLWDXJJHXMFDZPFZHQHQMQGKSLYHTYCGFRZGNQXCLPDLBZCSCZQLLJBLHBZCYPZZPPDYMZZSGYHCKCPZJGSLJLNSCDSLDL"
  127. + "XBMSTLDDFJMKDJDHZLZXLSZQPQPGJLLYBDSZGQLBZLSLKYYHZTTNTJYQTZZPSZQZTLLJTYYLLQLLQYZQLBDZLSLYYZYMDFSZSNHL"
  128. + "XZNCZQZPBWSKRFBSYZMTHBLGJPMCZZLSTLXSHTCSYZLZBLFEQHLXFLCJLYLJQCBZLZJHHSSTBRMHXZHJZCLXFNBGXGTQJCZTMSFZ"
  129. + "KJMSSNXLJKBHSJXNTNLZDNTLMSJXGZJYJCZXYJYJWRWWQNZTNFJSZPZSHZJFYRDJSFSZJZBJFZQZZHZLXFYSBZQLZSGYFTZDCSZX"
  130. + "ZJBQMSZKJRHYJZCKMJKHCHGTXKXQGLXPXFXTRTYLXJXHDTSJXHJZJXZWZLCQSBTXWXGXTXXHXFTSDKFJHZYJFJXRZSDLLLTQSQQZ"
  131. + "QWZXSYQTWGWBZCGZLLYZBCLMQQTZHZXZXLJFRMYZFLXYSQXXJKXRMQDZDMMYYBSQBHGZMWFWXGMXLZPYYTGZYCCDXYZXYWGSYJYZ"
  132. + "NBHPZJSQSYXSXRTFYZGRHZTXSZZTHCBFCLSYXZLZQMZLMPLMXZJXSFLBYZMYQHXJSXRXSQZZZSSLYFRCZJRCRXHHZXQYDYHXSJJH"
  133. + "ZCXZBTYNSYSXJBQLPXZQPYMLXZKYXLXCJLCYSXXZZLXDLLLJJYHZXGYJWKJRWYHCPSGNRZLFZWFZZNSXGXFLZSXZZZBFCSYJDBRJ"
  134. + "KRDHHGXJLJJTGXJXXSTJTJXLYXQFCSGSWMSBCTLQZZWLZZKXJMLTMJYHSDDBXGZHDLBMYJFRZFSGCLYJBPMLYSMSXLSZJQQHJZFX"
  135. + "GFQFQBPXZGYYQXGZTCQWYLTLGWSGWHRLFSFGZJMGMGBGTJFSYZZGZYZAFLSSPMLPFLCWBJZCLJJMZLPJJLYMQDMYYYFBGYGYZMLY"
  136. + "ZDXQYXRQQQHSYYYQXYLJTYXFSFSLLGNQCYHYCWFHCCCFXPYLYPLLZYXXXXXKQHHXSHJZCFZSCZJXCPZWHHHHHAPYLQALPQAFYHXD"
  137. + "YLUKMZQGGGDDESRNNZLTZGCHYPPYSQJJHCLLJTOLNJPZLJLHYMHEYDYDSQYCDDHGZUNDZCLZYZLLZNTNYZGSLHSLPJJBDGWXPCDU"
  138. + "TJCKLKCLWKLLCASSTKZZDNQNTTLYYZSSYSSZZRYLJQKCQDHHCRXRZYDGRGCWCGZQFFFPPJFZYNAKRGYWYQPQXXFKJTSZZXSWZDDF"
  139. + "BBXTBGTZKZNPZZPZXZPJSZBMQHKCYXYLDKLJNYPKYGHGDZJXXEAHPNZKZTZCMXCXMMJXNKSZQNMNLWBWWXJKYHCPSTMCSQTZJYXT"
  140. + "PCTPDTNNPGLLLZSJLSPBLPLQHDTNJNLYYRSZFFJFQWDPHZDWMRZCCLODAXNSSNYZRESTYJWJYJDBCFXNMWTTBYLWSTSZGYBLJPXG"
  141. + "LBOCLHPCBJLTMXZLJYLZXCLTPNCLCKXTPZJSWCYXSFYSZDKNTLBYJCYJLLSTGQCBXRYZXBXKLYLHZLQZLNZCXWJZLJZJNCJHXMNZ"
  142. + "ZGJZZXTZJXYCYYCXXJYYXJJXSSSJSTSSTTPPGQTCSXWZDCSYFPTFBFHFBBLZJCLZZDBXGCXLQPXKFZFLSYLTUWBMQJHSZBMDDBCY"
  143. + "SCCLDXYCDDQLYJJWMQLLCSGLJJSYFPYYCCYLTJANTJJPWYCMMGQYYSXDXQMZHSZXPFTWWZQSWQRFKJLZJQQYFBRXJHHFWJJZYQAZ"
  144. + "MYFRHCYYBYQWLPEXCCZSTYRLTTDMQLYKMBBGMYYJPRKZNPBSXYXBHYZDJDNGHPMFSGMWFZMFQMMBCMZZCJJLCNUXYQLMLRYGQZCY"
  145. + "XZLWJGCJCGGMCJNFYZZJHYCPRRCMTZQZXHFQGTJXCCJEAQCRJYHPLQLSZDJRBCQHQDYRHYLYXJSYMHZYDWLDFRYHBPYDTSSCNWBX"
  146. + "GLPZMLZZTQSSCPJMXXYCSJYTYCGHYCJWYRXXLFEMWJNMKLLSWTXHYYYNCMMCWJDQDJZGLLJWJRKHPZGGFLCCSCZMCBLTBHBQJXQD"
  147. + "SPDJZZGKGLFQYWBZYZJLTSTDHQHCTCBCHFLQMPWDSHYYTQWCNZZJTLBYMBPDYYYXSQKXWYYFLXXNCWCXYPMAELYKKJMZZZBRXYYQ"
  148. + "JFLJPFHHHYTZZXSGQQMHSPGDZQWBWPJHZJDYSCQWZKTXXSQLZYYMYSDZGRXCKKUJLWPYSYSCSYZLRMLQSYLJXBCXTLWDQZPCYCYK"
  149. + "PPPNSXFYZJJRCEMHSZMSXLXGLRWGCSTLRSXBZGBZGZTCPLUJLSLYLYMTXMTZPALZXPXJTJWTCYYZLBLXBZLQMYLXPGHDSLSSDMXM"
  150. + "BDZZSXWHAMLCZCPJMCNHJYSNSYGCHSKQMZZQDLLKABLWJXSFMOCDXJRRLYQZKJMYBYQLYHETFJZFRFKSRYXFJTWDSXXSYSQJYSLY"
  151. + "XWJHSNLXYYXHBHAWHHJZXWMYLJCSSLKYDZTXBZSYFDXGXZJKHSXXYBSSXDPYNZWRPTQZCZENYGCXQFJYKJBZMLJCMQQXUOXSLYXX"
  152. + "LYLLJDZBTYMHPFSTTQQWLHOKYBLZZALZXQLHZWRRQHLSTMYPYXJJXMQSJFNBXYXYJXXYQYLTHYLQYFMLKLJTMLLHSZWKZHLJMLHL"
  153. + "JKLJSTLQXYLMBHHLNLZXQJHXCFXXLHYHJJGBYZZKBXSCQDJQDSUJZYYHZHHMGSXCSYMXFEBCQWWRBPYYJQTYZCYQYQQZYHMWFFHG"
  154. + "ZFRJFCDPXNTQYZPDYKHJLFRZXPPXZDBBGZQSTLGDGYLCQMLCHHMFYWLZYXKJLYPQHSYWMQQGQZMLZJNSQXJQSYJYCBEHSXFSZPXZ"
  155. + "WFLLBCYYJDYTDTHWZSFJMQQYJLMQXXLLDTTKHHYBFPWTYYSQQWNQWLGWDEBZWCMYGCULKJXTMXMYJSXHYBRWFYMWFRXYQMXYSZTZ"
  156. + "ZTFYKMLDHQDXWYYNLCRYJBLPSXCXYWLSPRRJWXHQYPHTYDNXHHMMYWYTZCSQMTSSCCDALWZTCPQPYJLLQZYJSWXMZZMMYLMXCLMX"
  157. + "CZMXMZSQTZPPQQBLPGXQZHFLJJHYTJSRXWZXSCCDLXTYJDCQJXSLQYCLZXLZZXMXQRJMHRHZJBHMFLJLMLCLQNLDXZLLLPYPSYJY"
  158. + "SXCQQDCMQJZZXHNPNXZMEKMXHYKYQLXSXTXJYYHWDCWDZHQYYBGYBCYSCFGPSJNZDYZZJZXRZRQJJYMCANYRJTLDPPYZBSTJKXXZ"
  159. + "YPFDWFGZZRPYMTNGXZQBYXNBUFNQKRJQZMJEGRZGYCLKXZDSKKNSXKCLJSPJYYZLQQJYBZSSQLLLKJXTBKTYLCCDDBLSPPFYLGYD"
  160. + "TZJYQGGKQTTFZXBDKTYYHYBBFYTYYBCLPDYTGDHRYRNJSPTCSNYJQHKLLLZSLYDXXWBCJQSPXBPJZJCJDZFFXXBRMLAZHCSNDLBJ"
  161. + "DSZBLPRZTSWSBXBCLLXXLZDJZSJPYLYXXYFTFFFBHJJXGBYXJPMMMPSSJZJMTLYZJXSWXTYLEDQPJMYGQZJGDJLQJWJQLLSJGJGY"
  162. + "GMSCLJJXDTYGJQJQJCJZCJGDZZSXQGSJGGCXHQXSNQLZZBXHSGZXCXYLJXYXYYDFQQJHJFXDHCTXJYRXYSQTJXYEFYYSSYYJXNCY"
  163. + "ZXFXMSYSZXYYSCHSHXZZZGZZZGFJDLTYLNPZGYJYZYYQZPBXQBDZTZCZYXXYHHSQXSHDHGQHJHGYWSZTMZMLHYXGEBTYLZKQWYTJ"
  164. + "ZRCLEKYSTDBCYKQQSAYXCJXWWGSBHJYZYDHCSJKQCXSWXFLTYNYZPZCCZJQTZWJQDZZZQZLJJXLSBHPYXXPSXSHHEZTXFPTLQYZZ"
  165. + "XHYTXNCFZYYHXGNXMYWXTZSJPTHHGYMXMXQZXTSBCZYJYXXTYYZYPCQLMMSZMJZZLLZXGXZAAJZYXJMZXWDXZSXZDZXLEYJJZQBH"
  166. + "ZWZZZQTZPSXZTDSXJJJZNYAZPHXYYSRNQDTHZHYYKYJHDZXZLSWCLYBZYECWCYCRYLCXNHZYDZYDYJDFRJJHTRSQTXYXJRJHOJYN"
  167. + "XELXSFSFJZGHPZSXZSZDZCQZBYYKLSGSJHCZSHDGQGXYZGXCHXZJWYQWGYHKSSEQZZNDZFKWYSSTCLZSTSYMCDHJXXYWEYXCZAYD"
  168. + "MPXMDSXYBSQMJMZJMTZQLPJYQZCGQHXJHHLXXHLHDLDJQCLDWBSXFZZYYSCHTYTYYBHECXHYKGJPXHHYZJFXHWHBDZFYZBCAPNPG"
  169. + "NYDMSXHMMMMAMYNBYJTMPXYYMCTHJBZYFCGTYHWPHFTWZZEZSBZEGPFMTSKFTYCMHFLLHGPZJXZJGZJYXZSBBQSCZZLZCCSTPGXM"
  170. + "JSFTCCZJZDJXCYBZLFCJSYZFGSZLYBCWZZBYZDZYPSWYJZXZBDSYUXLZZBZFYGCZXBZHZFTPBGZGEJBSTGKDMFHYZZJHZLLZZGJQ"
  171. + "ZLSFDJSSCBZGPDLFZFZSZYZYZSYGCXSNXXCHCZXTZZLJFZGQSQYXZJQDCCZTQCDXZJYQJQCHXZTDLGSCXZSYQJQTZWLQDQZTQCHQ"
  172. + "QJZYEZZZPBWKDJFCJPZTYPQYQTTYNLMBDKTJZPQZQZZFPZSBNJLGYJDXJDZZKZGQKXDLPZJTCJDQBXDJQJSTCKNXBXZMSLYJCQMT"
  173. + "JQWWCJQNJNLLLHJCWQTBZQYDZCZPZZDZYDDCYZZZCCJTTJFZDPRRTZTJDCQTQZDTJNPLZBCLLCTZSXKJZQZPZLBZRBTJDCXFCZDB"
  174. + "CCJJLTQQPLDCGZDBBZJCQDCJWYNLLZYZCCDWLLXWZLXRXNTQQCZXKQLSGDFQTDDGLRLAJJTKUYMKQLLTZYTDYYCZGJWYXDXFRSKS"
  175. + "TQTENQMRKQZHHQKDLDAZFKYPBGGPZREBZZYKZZSPEGJXGYKQZZZSLYSYYYZWFQZYLZZLZHWCHKYPQGNPGBLPLRRJYXCCSYYHSFZF"
  176. + "YBZYYTGZXYLXCZWXXZJZBLFFLGSKHYJZEYJHLPLLLLCZGXDRZELRHGKLZZYHZLYQSZZJZQLJZFLNBHGWLCZCFJYSPYXZLZLXGCCP"
  177. + "ZBLLCYBBBBUBBCBPCRNNZCZYRBFSRLDCGQYYQXYGMQZWTZYTYJXYFWTEHZZJYWLCCNTZYJJZDEDPZDZTSYQJHDYMBJNYJZLXTSST"
  178. + "PHNDJXXBYXQTZQDDTJTDYYTGWSCSZQFLSHLGLBCZPHDLYZJYCKWTYTYLBNYTSDSYCCTYSZYYEBHEXHQDTWNYGYCLXTSZYSTQMYGZ"
  179. + "AZCCSZZDSLZCLZRQXYYELJSBYMXSXZTEMBBLLYYLLYTDQYSHYMRQWKFKBFXNXSBYCHXBWJYHTQBPBSBWDZYLKGZSKYHXQZJXHXJX"
  180. + "GNLJKZLYYCDXLFYFGHLJGJYBXQLYBXQPQGZTZPLNCYPXDJYQYDYMRBESJYYHKXXSTMXRCZZYWXYQYBMCLLYZHQYZWQXDBXBZWZMS"
  181. + "LPDMYSKFMZKLZCYQYCZLQXFZZYDQZPZYGYJYZMZXDZFYFYTTQTZHGSPCZMLCCYTZXJCYTJMKSLPZHYSNZLLYTPZCTZZCKTXDHXXT"
  182. + "QCYFKSMQCCYYAZHTJPCYLZLYJBJXTPNYLJYYNRXSYLMMNXJSMYBCSYSYLZYLXJJQYLDZLPQBFZZBLFNDXQKCZFYWHGQMRDSXYCYT"
  183. + "XNQQJZYYPFZXDYZFPRXEJDGYQBXRCNFYYQPGHYJDYZXGRHTKYLNWDZNTSMPKLBTHBPYSZBZTJZSZZJTYYXZPHSSZZBZCZPTQFZMY"
  184. + "FLYPYBBJQXZMXXDJMTSYSKKBJZXHJCKLPSMKYJZCXTMLJYXRZZQSLXXQPYZXMKYXXXJCLJPRMYYGADYSKQLSNDHYZKQXZYZTCGHZ"
  185. + "TLMLWZYBWSYCTBHJHJFCWZTXWYTKZLXQSHLYJZJXTMPLPYCGLTBZZTLZJCYJGDTCLKLPLLQPJMZPAPXYZLKKTKDZCZZBNZDYDYQZ"
  186. + "JYJGMCTXLTGXSZLMLHBGLKFWNWZHDXUHLFMKYSLGXDTWWFRJEJZTZHYDXYKSHWFZCQSHKTMQQHTZHYMJDJSKHXZJZBZZXYMPAGQM"
  187. + "STPXLSKLZYNWRTSQLSZBPSPSGZWYHTLKSSSWHZZLYYTNXJGMJSZSUFWNLSOZTXGXLSAMMLBWLDSZYLAKQCQCTMYCFJBSLXCLZZCL"
  188. + "XXKSBZQCLHJPSQPLSXXCKSLNHPSFQQYTXYJZLQLDXZQJZDYYDJNZPTUZDSKJFSLJHYLZSQZLBTXYDGTQFDBYAZXDZHZJNHHQBYKN"
  189. + "XJJQCZMLLJZKSPLDYCLBBLXKLELXJLBQYCXJXGCNLCQPLZLZYJTZLJGYZDZPLTQCSXFDMNYCXGBTJDCZNBGBQYQJWGKFHTNPYQZQ"
  190. + "GBKPBBYZMTJDYTBLSQMPSXTBNPDXKLEMYYCJYNZCTLDYKZZXDDXHQSHDGMZSJYCCTAYRZLPYLTLKXSLZCGGEXCLFXLKJRTLQJAQZ"
  191. + "NCMBYDKKCXGLCZJZXJHPTDJJMZQYKQSECQZDSHHADMLZFMMZBGNTJNNLGBYJBRBTMLBYJDZXLCJLPLDLPCQDHLXZLYCBLCXZZJAD"
  192. + "JLNZMMSSSMYBHBSQKBHRSXXJMXSDZNZPXLGBRHWGGFCXGMSKLLTSJYYCQLTSKYWYYHYWXBXQYWPYWYKQLSQPTNTKHQCWDQKTWPXX"
  193. + "HCPTHTWUMSSYHBWCRWXHJMKMZNGWTMLKFGHKJYLSYYCXWHYECLQHKQHTTQKHFZLDXQWYZYYDESBPKYRZPJFYYZJCEQDZZDLATZBB"
  194. + "FJLLCXDLMJSSXEGYGSJQXCWBXSSZPDYZCXDNYXPPZYDLYJCZPLTXLSXYZYRXCYYYDYLWWNZSAHJSYQYHGYWWAXTJZDAXYSRLTDPS"
  195. + "SYYFNEJDXYZHLXLLLZQZSJNYQYQQXYJGHZGZCYJCHZLYCDSHWSHJZYJXCLLNXZJJYYXNFXMWFPYLCYLLABWDDHWDXJMCXZTZPMLQ"
  196. + "ZHSFHZYNZTLLDYWLSLXHYMMYLMBWWKYXYADTXYLLDJPYBPWUXJMWMLLSAFDLLYFLBHHHBQQLTZJCQJLDJTFFKMMMBYTHYGDCQRDD"
  197. + "WRQJXNBYSNWZDBYYTBJHPYBYTTJXAAHGQDQTMYSTQXKBTZPKJLZRBEQQSSMJJBDJOTGTBXPGBKTLHQXJJJCTHXQDWJLWRFWQGWSH"
  198. + "CKRYSWGFTGYGBXSDWDWRFHWYTJJXXXJYZYSLPYYYPAYXHYDQKXSHXYXGSKQHYWFDDDPPLCJLQQEEWXKSYYKDYPLTJTHKJLTCYYHH"
  199. + "JTTPLTZZCDLTHQKZXQYSTEEYWYYZYXXYYSTTJKLLPZMCYHQGXYHSRMBXPLLNQYDQHXSXXWGDQBSHYLLPJJJTHYJKYPPTHYYKTYEZ"
  200. + "YENMDSHLCRPQFDGFXZPSFTLJXXJBSWYYSKSFLXLPPLBBBLBSFXFYZBSJSSYLPBBFFFFSSCJDSTZSXZRYYSYFFSYZYZBJTBCTSBSD"
  201. + "HRTJJBYTCXYJEYLXCBNEBJDSYXYKGSJZBXBYTFZWGENYHHTHZHHXFWGCSTBGXKLSXYWMTMBYXJSTZSCDYQRCYTWXZFHMYMCXLZNS"
  202. + "DJTTTXRYCFYJSBSDYERXJLJXBBDEYNJGHXGCKGSCYMBLXJMSZNSKGXFBNBPTHFJAAFXYXFPXMYPQDTZCXZZPXRSYWZDLYBBKTYQP"
  203. + "QJPZYPZJZNJPZJLZZFYSBTTSLMPTZRTDXQSJEHBZYLZDHLJSQMLHTXTJECXSLZZSPKTLZKQQYFSYGYWPCPQFHQHYTQXZKRSGTTSQ"
  204. + "CZLPTXCDYYZXSQZSLXLZMYCPCQBZYXHBSXLZDLTCDXTYLZJYYZPZYZLTXJSJXHLPMYTXCQRBLZSSFJZZTNJYTXMYJHLHPPLCYXQJ"
  205. + "QQKZZSCPZKSWALQSBLCCZJSXGWWWYGYKTJBBZTDKHXHKGTGPBKQYSLPXPJCKBMLLXDZSTBKLGGQKQLSBKKTFXRMDKBFTPZFRTBBR"
  206. + "FERQGXYJPZSSTLBZTPSZQZSJDHLJQLZBPMSMMSXLQQNHKNBLRDDNXXDHDDJCYYGYLXGZLXSYGMQQGKHBPMXYXLYTQWLWGCPBMQXC"
  207. + "YZYDRJBHTDJYHQSHTMJSBYPLWHLZFFNYPMHXXHPLTBQPFBJWQDBYGPNZTPFZJGSDDTQSHZEAWZZYLLTYYBWJKXXGHLFKXDJTMSZS"
  208. + "QYNZGGSWQSPHTLSSKMCLZXYSZQZXNCJDQGZDLFNYKLJCJLLZLMZZNHYDSSHTHZZLZZBBHQZWWYCRZHLYQQJBEYFXXXWHSRXWQHWP"
  209. + "SLMSSKZTTYGYQQWRSLALHMJTQJSMXQBJJZJXZYZKXBYQXBJXSHZTSFJLXMXZXFGHKZSZGGYLCLSARJYHSLLLMZXELGLXYDJYTLFB"
  210. + "HBPNLYZFBBHPTGJKWETZHKJJXZXXGLLJLSTGSHJJYQLQZFKCGNNDJSSZFDBCTWWSEQFHQJBSAQTGYPQLBXBMMYWXGSLZHGLZGQYF"
  211. + "LZBYFZJFRYSFMBYZHQGFWZSYFYJJPHZBYYZFFWODGRLMFTWLBZGYCQXCDJYGZYYYYTYTYDWEGAZYHXJLZYYHLRMGRXXZCLHNELJJ"
  212. + "TJTPWJYBJJBXJJTJTEEKHWSLJPLPSFYZPQQBDLQJJTYYQLYZKDKSQJYYQZLDQTGJQYZJSUCMRYQTHTEJMFCTYHYPKMHYZWJDQFHY"
  213. + "YXWSHCTXRLJHQXHCCYYYJLTKTTYTMXGTCJTZAYYOCZLYLBSZYWJYTSJYHBYSHFJLYGJXXTMZYYLTXXYPZLXYJZYZYYPNHMYMDYYL"
  214. + "BLHLSYYQQLLNJJYMSOYQBZGDLYXYLCQYXTSZEGXHZGLHWBLJHEYXTWQMAKBPQCGYSHHEGQCMWYYWLJYJHYYZLLJJYLHZYHMGSLJL"
  215. + "JXCJJYCLYCJPCPZJZJMMYLCQLNQLJQJSXYJMLSZLJQLYCMMHCFMMFPQQMFYLQMCFFQMMMMHMZNFHHJGTTHHKHSLNCHHYQDXTMMQD"
  216. + "CYZYXYQMYQYLTDCYYYZAZZCYMZYDLZFFFMMYCQZWZZMABTBYZTDMNZZGGDFTYPCGQYTTSSFFWFDTZQSSYSTWXJHXYTSXXYLBYQHW"
  217. + "WKXHZXWZNNZZJZJJQJCCCHYYXBZXZCYZTLLCQXYNJYCYYCYNZZQYYYEWYCZDCJYCCHYJLBTZYYCQWMPWPYMLGKDLDLGKQQBGYCHJ"
  218. + "XY";
  219. public static int getUnicodeFromGBK(String text) {
  220. int unicode = 0;
  221. byte buff[] = null;
  222. String str = text;
  223. if (str == null || str.length() <= 0)
  224. return unicode;
  225. // 如果进入的串长度大于1,则只返回第一个字的Unicode值
  226. if (str.length() > 1)
  227. str = text.substring(0, 1);
  228. try {
  229. // 取得字的Unicode值,其中buff[0],buff[1]为Unicode的标识,而buff[3]为Unicode值的高位字节,buff[2]为Unicode值的低位字节
  230. // buff = str.getBytes ( "Unicode" ); //
  231. // 不用直接用"Unicode",因为有的JRE环境下可能高低位会相反不统一,因此使用"UnicodeLittle"则会统一要求低位在前,相反"UnicodeBig"则是统一要求高位在前
  232. buff = str.getBytes("UnicodeLittle");
  233. unicode = (((int) (buff[3]) << 8) & 0xff00)
  234. + ((int) (buff[2]) & 0x00ff);
  235. } catch (Exception e) {
  236. e.printStackTrace();
  237. }
  238. return unicode;
  239. }
  240. /**
  241. * 根据输入的源串(中文或中西文混合)返回其拼音首字母,以小写返回,如果首字符非拼音字母,则统一返回""
  242. *
  243. * @param str
  244. * @return
  245. */
  246. public static String getFirstCharOfString(String str) {
  247. String firstchar = "";
  248. int unicode = getUnicodeFromGBK(str);
  249. if (unicode >= 19968 && unicode <= 40869)
  250. firstchar = GBK2UNICODE.substring(unicode - 19968,
  251. unicode - 19968 + 1);
  252. return firstchar.toLowerCase();
  253. }
  254. /**
  255. * 根据输入的源串(中文或中西文混合)返回其拼音首字母串,如果中间有非字母符号则保留
  256. *
  257. * @param str
  258. * @return
  259. */
  260. public static String getSimpleCharsOfString(String str) {
  261. String chars = "";
  262. String firstchar = "";
  263. if (str == null)
  264. return chars;
  265. for (int i = 0; i < str.length(); i++) {
  266. firstchar = getFirstCharOfString(String.valueOf(str.charAt(i)));
  267. if (firstchar.length() <= 0)
  268. firstchar = String.valueOf(str.charAt(i));
  269. chars += firstchar;
  270. }
  271. return chars;
  272. }
  273. /**
  274. * 根据输入的源串(中文或中西文混合)返回其拼音首字母串,如果中间有非字母符号则保留,但,如果中间有空格则"吃"掉
  275. *
  276. * @param str
  277. * @return
  278. */
  279. public static String getSimpleCharsOfStringByTrim(String str) {
  280. String chars = "";
  281. String firstchar = "";
  282. if (str == null)
  283. return chars;
  284. for (int i = 0; i < str.length(); i++) {
  285. firstchar = getFirstCharOfString(String.valueOf(str.charAt(i)));
  286. if (firstchar.length() <= 0) {
  287. if (str.charAt(i) != ' ')
  288. firstchar = String.valueOf(str.charAt(i));
  289. }
  290. chars += firstchar;
  291. }
  292. return chars;
  293. }
  294. }
package com.suntek.mobilemeeting.utils;/*** 根据 GBK 汉字的 UNICODE 编码取得汉字的首字母* * @author zrq* */public class UnicodeGBK2Alpha {private final static String GBK2UNICODE = "YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSCYYYNJQYXXGJ"+ "HHSDSJNKKTMOMLCRXYPSNQSECCQZGGLLYJLMYZZSECYKYYHQWJSSGGYXYZYJWWKDJHYCHMYXJTLXJYQBYXZLDWRDJRWYSRLDZJPC"+ "BZJJBRCFTLECZSTZFXXZHTRQHYBDLYCZSSYMMRFMYQZPWWJJYFCRWFDFZQPYDDWYXKYJAWJFFXYPSFTZYHHYZYSWCJYXSCLCXXWZ"+ "ZXNBGNNXBXLZSZSBSGPYSYZDHMDZBQBZCWDZZYYTZHBTSYYBZGNTNXQYWQSKBPHHLXGYBFMJEBJHHGQTJCYSXSTKZHLYCKGLYSMZ"+ "XYALMELDCCXGZYRJXSDLTYZCQKCNNJWHJTZZCQLJSTSTBNXBTYXCEQXGKWJYFLZQLYHYXSPSFXLMPBYSXXXYDJCZYLLLSJXFHJXP"+ "JBTFFYABYXBHZZBJYZLWLCZGGBTSSMDTJZXPTHYQTGLJSCQFZKJZJQNLZWLSLHDZBWJNCJZYZSQQYCQYRZCJJWYBRTWPYFTWEXCS"+ "KDZCTBZHYZZYYJXZCFFZZMJYXXSDZZOTTBZLQWFCKSZSXFYRLNYJMBDTHJXSQQCCSBXYYTSYFBXDZTGBCNSLCYZZPSAZYZZSCJCS"+ "HZQYDXLBPJLLMQXTYDZXSQJTZPXLCGLQTZWJBHCTSYJSFXYEJJTLBGXSXJMYJQQPFZASYJNTYDJXKJCDJSZCBARTDCLYJQMWNQNC"+ "LLLKBYBZZSYHQQLTWLCCXTXLLZNTYLNEWYZYXCZXXGRKRMTCNDNJTSYYSSDQDGHSDBJGHRWRQLYBGLXHLGTGXBQJDZPYJSJYJCTM"+ "RNYMGRZJCZGJMZMGXMPRYXKJNYMSGMZJYMKMFXMLDTGFBHCJHKYLPFMDXLQJJSMTQGZSJLQDLDGJYCALCMZCSDJLLNXDJFFFFJCZ"+ "FMZFFPFKHKGDPSXKTACJDHHZDDCRRCFQYJKQCCWJDXHWJLYLLZGCFCQDSMLZPBJJPLSBCJGGDCKKDEZSQCCKJGCGKDJTJDLZYCXK"+ "LQSCGJCLTFPCQCZGWPJDQYZJJBYJHSJDZWGFSJGZKQCCZLLPSPKJGQJHZZLJPLGJGJJTHJJYJZCZMLZLYQBGJWMLJKXZDZNJQSYZ"+ "MLJLLJKYWXMKJLHSKJGBMCLYYMKXJQLBMLLKMDXXKWYXYSLMLPSJQQJQXYXFJTJDXMXXLLCXQBSYJBGWYMBGGBCYXPJYGPEPFGDJ"+ "GBHBNSQJYZJKJKHXQFGQZKFHYGKHDKLLSDJQXPQYKYBNQSXQNSZSWHBSXWHXWBZZXDMNSJBSBKBBZKLYLXGWXDRWYQZMYWSJQLCJ"+ "XXJXKJEQXSCYETLZHLYYYSDZPAQYZCMTLSHTZCFYZYXYLJSDCJQAGYSLCQLYYYSHMRQQKLDXZSCSSSYDYCJYSFSJBFRSSZQSBXXP"+ "XJYSDRCKGJLGDKZJZBDKTCSYQPYHSTCLDJDHMXMCGXYZHJDDTMHLTXZXYLYMOHYJCLTYFBQQXPFBDFHHTKSQHZYYWCNXXCRWHOWG"+ "YJLEGWDQCWGFJYCSNTMYTOLBYGWQWESJPWNMLRYDZSZTXYQPZGCWXHNGPYXSHMYQJXZTDPPBFYHZHTJYFDZWKGKZBLDNTSXHQEEG"+ "ZZYLZMMZYJZGXZXKHKSTXNXXWYLYAPSTHXDWHZYMPXAGKYDXBHNHXKDPJNMYHYLPMGOCSLNZHKXXLPZZLBMLSFBHHGYGYYGGBHSC"+ "YAQTYWLXTZQCEZYDQDQMMHTKLLSZHLSJZWFYHQSWSCWLQAZYNYTLSXTHAZNKZZSZZLAXXZWWCTGQQTDDYZTCCHYQZFLXPSLZYGPZ"+ "SZNGLNDQTBDLXGTCTAJDKYWNSYZLJHHZZCWNYYZYWMHYCHHYXHJKZWSXHZYXLYSKQYSPSLYZWMYPPKBYGLKZHTYXAXQSYSHXASMC"+ "HKDSCRSWJPWXSGZJLWWSCHSJHSQNHCSEGNDAQTBAALZZMSSTDQJCJKTSCJAXPLGGXHHGXXZCXPDMMHLDGTYBYSJMXHMRCPXXJZCK"+ "ZXSHMLQXXTTHXWZFKHCCZDYTCJYXQHLXDHYPJQXYLSYYDZOZJNYXQEZYSQYAYXWYPDGXDDXSPPYZNDLTWRHXYDXZZJHTCXMCZLHP"+ "YYYYMHZLLHNXMYLLLMDCPPXHMXDKYCYRDLTXJCHHZZXZLCCLYLNZSHZJZZLNNRLWHYQSNJHXYNTTTKYJPYCHHYEGKCTTWLGQRLGG"+ "TGTYGYHPYHYLQYQGCWYQKPYYYTTTTLHYHLLTYTTSPLKYZXGZWGPYDSSZZDQXSKCQNMJJZZBXYQMJRTFFBTKHZKBXLJJKDXJTLBWF"+ "ZPPTKQTZTGPDGNTPJYFALQMKGXBDCLZFHZCLLLLADPMXDJHLCCLGYHDZFGYDDGCYYFGYDXKSSEBDHYKDKDKHNAXXYBPBYYHXZQGA"+ "FFQYJXDMLJCSQZLLPCHBSXGJYNDYBYQSPZWJLZKSDDTACTBXZDYZYPJZQSJNKKTKNJDJGYYPGTLFYQKASDNTCYHBLWDZHBBYDWJR"+ "YGKZYHEYYFJMSDTYFZJJHGCXPLXHLDWXXJKYTCYKSSSMTWCTTQZLPBSZDZWZXGZAGYKTYWXLHLSPBCLLOQMMZSSLCMBJCSZZKYDC"+ "ZJGQQDSMCYTZQQLWZQZXSSFPTTFQMDDZDSHDTDWFHTDYZJYQJQKYPBDJYYXTLJHDRQXXXHAYDHRJLKLYTWHLLRLLRCXYLBWSRSZZ"+ "SYMKZZHHKYHXKSMDSYDYCJPBZBSQLFCXXXNXKXWYWSDZYQOGGQMMYHCDZTTFJYYBGSTTTYBYKJDHKYXBELHTYPJQNFXFDYKZHQKZ"+ "BYJTZBXHFDXKDASWTAWAJLDYJSFHBLDNNTNQJTJNCHXFJSRFWHZFMDRYJYJWZPDJKZYJYMPCYZNYNXFBYTFYFWYGDBNZZZDNYTXZ"+ "EMMQBSQEHXFZMBMFLZZSRXYMJGSXWZJSPRYDJSJGXHJJGLJJYNZZJXHGXKYMLPYYYCXYTWQZSWHWLYRJLPXSLSXMFSWWKLCTNXNY"+ "NPSJSZHDZEPTXMYYWXYYSYWLXJQZQXZDCLEEELMCPJPCLWBXSQHFWWTFFJTNQJHJQDXHWLBYZNFJLALKYYJLDXHHYCSTYYWNRJYX"+ "YWTRMDRQHWQCMFJDYZMHMYYXJWMYZQZXTLMRSPWWCHAQBXYGZYPXYYRRCLMPYMGKSJSZYSRMYJSNXTPLNBAPPYPYLXYYZKYNLDZY"+ "JZCZNNLMZHHARQMPGWQTZMXXMLLHGDZXYHXKYXYCJMFFYYHJFSBSSQLXXNDYCANNMTCJCYPRRNYTYQNYYMBMSXNDLYLYSLJRLXYS"+ "XQMLLYZLZJJJKYZZCSFBZXXMSTBJGNXYZHLXNMCWSCYZYFZLXBRNNNYLBNRTGZQYSATSWRYHYJZMZDHZGZDWYBSSCSKXSYHYTXXG"+ "CQGXZZSHYXJSCRHMKKBXCZJYJYMKQHZJFNBHMQHYSNJNZYBKNQMCLGQHWLZNZSWXKHLJHYYBQLBFCDSXDLDSPFZPSKJYZWZXZDDX"+ "JSMMEGJSCSSMGCLXXKYYYLNYPWWWGYDKZJGGGZGGSYCKNJWNJPCXBJJTQTJWDSSPJXZXNZXUMELPXFSXTLLXCLJXJJLJZXCTPSWX"+ "LYDHLYQRWHSYCSQYYBYAYWJJJQFWQCQQCJQGXALDBZZYJGKGXPLTZYFXJLTPADKYQHPMATLCPDCKBMTXYBHKLENXDLEEGQDYMSAW"+ "HZMLJTWYGXLYQZLJEEYYBQQFFNLYXRDSCTGJGXYYNKLLYQKCCTLHJLQMKKZGCYYGLLLJDZGYDHZWXPYSJBZKDZGYZZHYWYFQYTYZ"+ "SZYEZZLYMHJJHTSMQWYZLKYYWZCSRKQYTLTDXWCTYJKLWSQZWBDCQYNCJSRSZJLKCDCDTLZZZACQQZZDDXYPLXZBQJYLZLLLQDDZ"+ "QJYJYJZYXNYYYNYJXKXDAZWYRDLJYYYRJLXLLDYXJCYWYWNQCCLDDNYYYNYCKCZHXXCCLGZQJGKWPPCQQJYSBZZXYJSQPXJPZBSB"+ "DSFNSFPZXHDWZTDWPPTFLZZBZDMYYPQJRSDZSQZSQXBDGCPZSWDWCSQZGMDHZXMWWFYBPDGPHTMJTHZSMMBGZMBZJCFZWFZBBZMQ"+ "CFMBDMCJXLGPNJBBXGYHYYJGPTZGZMQBQTCGYXJXLWZKYDPDYMGCFTPFXYZTZXDZXTGKMTYBBCLBJASKYTSSQYYMSZXFJEWLXLLS"+ "ZBQJJJAKLYLXLYCCTSXMCWFKKKBSXLLLLJYXTYLTJYYTDPJHNHNNKBYQNFQYYZBYYESSESSGDYHFHWTCJBSDZZTFDMXHCNJZYMQW"+ "SRYJDZJQPDQBBSTJGGFBKJBXTGQHNGWJXJGDLLTHZHHYYYYYYSXWTYYYCCBDBPYPZYCCZYJPZYWCBDLFWZCWJDXXHYHLHWZZXJTC"+ "ZLCDPXUJCZZZLYXJJTXPHFXWPYWXZPTDZZBDZCYHJHMLXBQXSBYLRDTGJRRCTTTHYTCZWMXFYTWWZCWJWXJYWCSKYBZSCCTZQNHX"+ "NWXXKHKFHTSWOCCJYBCMPZZYKBNNZPBZHHZDLSYDDYTYFJPXYNGFXBYQXCBHXCPSXTYZDMKYSNXSXLHKMZXLYHDHKWHXXSSKQYHH"+ "CJYXGLHZXCSNHEKDTGZXQYPKDHEXTYKCNYMYYYPKQYYYKXZLTHJQTBYQHXBMYHSQCKWWYLLHCYYLNNEQXQWMCFBDCCMLJGGXDQKT"+ "LXKGNQCDGZJWYJJLYHHQTTTNWCHMXCXWHWSZJYDJCCDBQCDGDNYXZTHCQRXCBHZTQCBXWGQWYYBXHMBYMYQTYEXMQKYAQYRGYZSL"+ "FYKKQHYSSQYSHJGJCNXKZYCXSBXYXHYYLSTYCXQTHYSMGSCPMMGCCCCCMTZTASMGQZJHKLOSQYLSWTMXSYQKDZLJQQYPLSYCZTCQ"+ "QPBBQJZCLPKHQZYYXXDTDDTSJCXFFLLCHQXMJLWCJCXTSPYCXNDTJSHJWXDQQJSKXYAMYLSJHMLALYKXCYYDMNMDQMXMCZNNCYBZ"+ "KKYFLMCHCMLHXRCJJHSYLNMTJZGZGYWJXSRXCWJGJQHQZDQJDCJJZKJKGDZQGJJYJYLXZXXCDQHHHEYTMHLFSBDJSYYSHFYSTCZQ"+ "LPBDRFRZTZYKYWHSZYQKWDQZRKMSYNBCRXQBJYFAZPZZEDZCJYWBCJWHYJBQSZYWRYSZPTDKZPFPBNZTKLQYHBBZPNPPTYZZYBQN"+ "YDCPJMMCYCQMCYFZZDCMNLFPBPLNGQJTBTTNJZPZBBZNJKLJQYLNBZQHKSJZNGGQSZZKYXSHPZSNBCGZKDDZQANZHJKDRTLZLSWJ"+ "LJZLYWTJNDJZJHXYAYNCBGTZCSSQMNJPJYTYSWXZFKWJQTKHTZPLBHSNJZSYZBWZZZZLSYLSBJHDWWQPSLMMFBJDWAQYZTCJTBNN"+ "WZXQXCDSLQGDSDPDZHJTQQPSWLYYJZLGYXYZLCTCBJTKTYCZJTQKBSJLGMGZDMCSGPYNJZYQYYKNXRPWSZXMTNCSZZYXYBYHYZAX"+ "YWQCJTLLCKJJTJHGDXDXYQYZZBYWDLWQCGLZGJGQRQZCZSSBCRPCSKYDZNXJSQGXSSJMYDNSTZTPBDLTKZWXQWQTZEXNQCZGWEZK"+ "SSBYBRTSSSLCCGBPSZQSZLCCGLLLZXHZQTHCZMQGYZQZNMCOCSZJMMZSQPJYGQLJYJPPLDXRGZYXCCSXHSHGTZNLZWZKJCXTCFCJ"+ "XLBMQBCZZWPQDNHXLJCTHYZLGYLNLSZZPCXDSCQQHJQKSXZPBAJYEMSMJTZDXLCJYRYYNWJBNGZZTMJXLTBSLYRZPYLSSCNXPHLL"+ "HYLLQQZQLXYMRSYCXZLMMCZLTZSDWTJJLLNZGGQXPFSKYGYGHBFZPDKMWGHCXMSGDXJMCJZDYCABXJDLNBCDQYGSKYDQTXDJJYXM"+ "SZQAZDZFSLQXYJSJZYLBTXXWXQQZBJZUFBBLYLWDSLJHXJYZJWTDJCZFQZQZZDZSXZZQLZCDZFJHYSPYMPQZMLPPLFFXJJNZZYLS"+ "JEYQZFPFZKSYWJJJHRDJZZXTXXGLGHYDXCSKYSWMMZCWYBAZBJKSHFHJCXMHFQHYXXYZFTSJYZFXYXPZLCHMZMBXHZZSXYFYMNCW"+ "DABAZLXKTCSHHXKXJJZJSTHYGXSXYYHHHJWXKZXSSBZZWHHHCWTZZZPJXSNXQQJGZYZYWLLCWXZFXXYXYHXMKYYSWSQMNLNAYCYS"+ "PMJKHWCQHYLAJJMZXHMMCNZHBHXCLXTJPLTXYJHDYYLTTXFSZHYXXSJBJYAYRSMXYPLCKDUYHLXRLNLLSTYZYYQYGYHHSCCSMZCT"+ "ZQXKYQFPYYRPFFLKQUNTSZLLZMWWTCQQYZWTLLMLMPWMBZSSTZRBPDDTLQJJBXZCSRZQQYGWCSXFWZLXCCRSZDZMCYGGDZQSGTJS"+ "WLJMYMMZYHFBJDGYXCCPSHXNZCSBSJYJGJMPPWAFFYFNXHYZXZYLREMZGZCYZSSZDLLJCSQFNXZKPTXZGXJJGFMYYYSNBTYLBNLH"+ "PFZDCYFBMGQRRSSSZXYSGTZRNYDZZCDGPJAFJFZKNZBLCZSZPSGCYCJSZLMLRSZBZZLDLSLLYSXSQZQLYXZLSKKBRXBRBZCYCXZZ"+ "ZEEYFGKLZLYYHGZSGZLFJHGTGWKRAAJYZKZQTSSHJJXDCYZUYJLZYRZDQQHGJZXSSZBYKJPBFRTJXLLFQWJHYLQTYMBLPZDXTZYG"+ "BDHZZRBGXHWNJTJXLKSCFSMWLSDQYSJTXKZSCFWJLBXFTZLLJZLLQBLSQMQQCGCZFPBPHZCZJLPYYGGDTGWDCFCZQYYYQYSSCLXZ"+ "SKLZZZGFFCQNWGLHQYZJJCZLQZZYJPJZZBPDCCMHJGXDQDGDLZQMFGPSYTSDYFWWDJZJYSXYYCZCYHZWPBYKXRYLYBHKJKSFXTZJ"+ "MMCKHLLTNYYMSYXYZPYJQYCSYCWMTJJKQYRHLLQXPSGTLYYCLJSCPXJYZFNMLRGJJTYZBXYZMSJYJHHFZQMSYXRSZCWTLRTQZSST"+ "KXGQKGSPTGCZNJSJCQCXHMXGGZTQYDJKZDLBZSXJLHYQGGGTHQSZPYHJHHGYYGKGGCWJZZYLCZLXQSFTGZSLLLMLJSKCTBLLZZSZ"+ "MMNYTPZSXQHJCJYQXYZXZQZCPSHKZZYSXCDFGMWQRLLQXRFZTLYSTCTMJCXJJXHJNXTNRZTZFQYHQGLLGCXSZSJDJLJCYDSJTLNY"+ "XHSZXCGJZYQPYLFHDJSBPCCZHJJJQZJQDYBSSLLCMYTTMQTBHJQNNYGKYRQYQMZGCJKPDCGMYZHQLLSLLCLMHOLZGDYYFZSLJCQZ"+ "LYLZQJESHNYLLJXGJXLYSYYYXNBZLJSSZCQQCJYLLZLTJYLLZLLBNYLGQCHXYYXOXCXQKYJXXXYKLXSXXYQXCYKQXQCSGYXXYQXY"+ "GYTQOHXHXPYXXXULCYEYCHZZCBWQBBWJQZSCSZSSLZYLKDESJZWMYMCYTSDSXXSCJPQQSQYLYYZYCMDJDZYWCBTJSYDJKCYDDJLB"+ "DJJSODZYSYXQQYXDHHGQQYQHDYXWGMMMAJDYBBBPPBCMUUPLJZSMTXERXJMHQNUTPJDCBSSMSSSTKJTSSMMTRCPLZSZMLQDSDMJM"+ "QPNQDXCFYNBFSDQXYXHYAYKQYDDLQYYYSSZBYDSLNTFQTZQPZMCHDHCZCWFDXTMYQSPHQYYXSRGJCWTJTZZQMGWJJTJHTQJBBHWZ"+ "PXXHYQFXXQYWYYHYSCDYDHHQMNMTMWCPBSZPPZZGLMZFOLLCFWHMMSJZTTDHZZYFFYTZZGZYSKYJXQYJZQBHMBZZLYGHGFMSHPZF"+ "ZSNCLPBQSNJXZSLXXFPMTYJYGBXLLDLXPZJYZJYHHZCYWHJYLSJEXFSZZYWXKZJLUYDTMLYMQJPWXYHXSKTQJEZRPXXZHHMHWQPW"+ "QLYJJQJJZSZCPHJLCHHNXJLQWZJHBMZYXBDHHYPZLHLHLGFWLCHYYTLHJXCJMSCPXSTKPNHQXSRTYXXTESYJCTLSSLSTDLLLWWYH"+ "DHRJZSFGXTSYCZYNYHTDHWJSLHTZDQDJZXXQHGYLTZPHCSQFCLNJTCLZPFSTPDYNYLGMJLLYCQHYSSHCHYLHQYQTMZYPBYWRFQYK"+ "QSYSLZDQJMPXYYSSRHZJNYWTQDFZBWWTWWRXCWHGYHXMKMYYYQMSMZHNGCEPMLQQMTCWCTMMPXJPJJHFXYYZSXZHTYBMSTSYJTTQ"+ "QQYYLHYNPYQZLCYZHZWSMYLKFJXLWGXYPJYTYSYXYMZCKTTWLKSMZSYLMPWLZWXWQZSSAQSYXYRHSSNTSRAPXCPWCMGDXHXZDZYF"+ "JHGZTTSBJHGYZSZYSMYCLLLXBTYXHBBZJKSSDMALXHYCFYGMQYPJYCQXJLLLJGSLZGQLYCJCCZOTYXMTMTTLLWTGPXYMZMKLPSZZ"+ "ZXHKQYSXCTYJZYHXSHYXZKXLZWPSQPYHJWPJPWXQQYLXSDHMRSLZZYZWTTCYXYSZZSHBSCCSTPLWSSCJCHNLCGCHSSPHYLHFHHXJ"+ "SXYLLNYLSZDHZXYLSXLWZYKCLDYAXZCMDDYSPJTQJZLNWQPSSSWCTSTSZLBLNXSMNYYMJQBQHRZWTYYDCHQLXKPZWBGQYBKFCMZW"+ "PZLLYYLSZYDWHXPSBCMLJBSCGBHXLQHYRLJXYSWXWXZSLDFHLSLYNJLZYFLYJYCDRJLFSYZFSLLCQYQFGJYHYXZLYLMSTDJCYHBZ"+ "LLNWLXXYGYYHSMGDHXXHHLZZJZXCZZZCYQZFNGWPYLCPKPYYPMCLQKDGXZGGWQBDXZZKZFBXXLZXJTPJPTTBYTSZZDWSLCHZHSLT"+ "YXHQLHYXXXYYZYSWTXZKHLXZXZPYHGCHKCFSYHUTJRLXFJXPTZTWHPLYXFCRHXSHXKYXXYHZQDXQWULHYHMJTBFLKHTXCWHJFWJC"+ "FPQRYQXCYYYQYGRPYWSGSUNGWCHKZDXYFLXXHJJBYZWTSXXNCYJJYMSWZJQRMHXZWFQSYLZJZGBHYNSLBGTTCSYBYXXWXYHXYYXN"+ "SQYXMQYWRGYQLXBBZLJSYLPSYTJZYHYZAWLRORJMKSCZJXXXYXCHDYXRYXXJDTSQFXLYLTSFFYXLMTYJMJUYYYXLTZCSXQZQHZXL"+ "YYXZHDNBRXXXJCTYHLBRLMBRLLAXKYLLLJLYXXLYCRYLCJTGJCMTLZLLCYZZPZPCYAWHJJFYBDYYZSMPCKZDQYQPBPCJPDCYZMDP"+ "BCYYDYCNNPLMTMLRMFMMGWYZBSJGYGSMZQQQZTXMKQWGXLLPJGZBQCDJJJFPKJKCXBLJMSWMDTQJXLDLPPBXCWRCQFBFQJCZAHZG"+ "MYKPHYYHZYKNDKZMBPJYXPXYHLFPNYYGXJDBKXNXHJMZJXSTRSTLDXSKZYSYBZXJLXYSLBZYSLHXJPFXPQNBYLLJQKYGZMCYZZYM"+ "CCSLCLHZFWFWYXZMWSXTYNXJHPYYMCYSPMHYSMYDYSHQYZCHMJJMZCAAGCFJBBHPLYZYLXXSDJGXDHKXXTXXNBHRMLYJSLTXMRHN"+ "LXQJXYZLLYSWQGDLBJHDCGJYQYCMHWFMJYBMBYJYJWYMDPWHXQLDYGPDFXXBCGJSPCKRSSYZJMSLBZZJFLJJJLGXZGYXYXLSZQYX"+ "BEXYXHGCXBPLDYHWETTWWCJMBTXCHXYQXLLXFLYXLLJLSSFWDPZSMYJCLMWYTCZPCHQEKCQBWLCQYDPLQPPQZQFJQDJHYMMCXTXD"+ "RMJWRHXCJZYLQXDYYNHYYHRSLSRSYWWZJYMTLTLLGTQCJZYABTCKZCJYCCQLJZQXALMZYHYWLWDXZXQDLLQSHGPJFJLJHJABCQZD"+ "JGTKHSSTCYJLPSWZLXZXRWGLDLZRLZXTGSLLLLZLYXXWGDZYGBDPHZPBRLWSXQBPFDWOFMWHLYPCBJCCLDMBZPBZZLCYQXLDOMZB"+ "LZWPDWYYGDSTTHCSQSCCRSSSYSLFYBFNTYJSZDFNDPDHDZZMBBLSLCMYFFGTJJQWFTMTPJWFNLBZCMMJTGBDZLQLPYFHYYMJYLSD"+ "CHDZJWJCCTLJCLDTLJJCPDDSQDSSZYBNDBJLGGJZXSXNLYCYBJXQYCBYLZCFZPPGKCXZDZFZTJJFJSJXZBNZYJQTTYJYHTYCZHYM"+ "DJXTTMPXSPLZCDWSLSHXYPZGTFMLCJTYCBPMGDKWYCYZCDSZZYHFLYCTYGWHKJYYLSJCXGYWJCBLLCSNDDBTZBSCLYZCZZSSQDLL"+ "MQYYHFSLQLLXFTYHABXGWNYWYYPLLSDLDLLBJCYXJZMLHLJDXYYQYTDLLLBUGBFDFBBQJZZMDPJHGCLGMJJPGAEHHBWCQXAXHHHZ"+ "CHXYPHJAXHLPHJPGPZJQCQZGJJZZUZDMQYYBZZPHYHYBWHAZYJHYKFGDPFQSDLZMLJXKXGALXZDAGLMDGXMWZQYXXDXXPFDMMSSY"+ "MPFMDMMKXKSYZYSHDZKXSYSMMZZZMSYDNZZCZXFPLSTMZDNMXCKJMZTYYMZMZZMSXHHDCZJEMXXKLJSTLWLSQLYJZLLZJSSDPPMH"+ "NLZJCZYHMXXHGZCJMDHXTKGRMXFWMCGMWKDTKSXQMMMFZZYDKMSCLCMPCGMHSPXQPZDSSLCXKYXTWLWJYAHZJGZQMCSNXYYMMPML"+ "KJXMHLMLQMXCTKZMJQYSZJSYSZHSYJZJCDAJZYBSDQJZGWZQQXFKDMSDJLFWEHKZQKJPEYPZYSZCDWYJFFMZZYLTTDZZEFMZLBNP"+ "PLPLPEPSZALLTYLKCKQZKGENQLWAGYXYDPXLHSXQQWQCQXQCLHYXXMLYCCWLYMQYSKGCHLCJNSZKPYZKCQZQLJPDMDZHLASXLBYD"+ "WQLWDNBQCRYDDZTJYBKBWSZDXDTNPJDTCTQDFXQQMGNXECLTTBKPWSLCTYQLPWYZZKLPYGZCQQPLLKCCYLPQMZCZQCLJSLQZDJXL"+ "DDHPZQDLJJXZQDXYZQKZLJCYQDYJPPYPQYKJYRMPCBYMCXKLLZLLFQPYLLLMBSGLCYSSLRSYSQTMXYXZQZFDZUYSYZTFFMZZSMZQ"+ "HZSSCCMLYXWTPZGXZJGZGSJSGKDDHTQGGZLLBJDZLCBCHYXYZHZFYWXYZYMSDBZZYJGTSMTFXQYXQSTDGSLNXDLRYZZLRYYLXQHT"+ "XSRTZNGZXBNQQZFMYKMZJBZYMKBPNLYZPBLMCNQYZZZSJZHJCTZKHYZZJRDYZHNPXGLFZTLKGJTCTSSYLLGZRZBBQZZKLPKLCZYS"+ "SUYXBJFPNJZZXCDWXZYJXZZDJJKGGRSRJKMSMZJLSJYWQSKYHQJSXPJZZZLSNSHRNYPZTWCHKLPSRZLZXYJQXQKYSJYCZTLQZYBB"+ "YBWZPQDWWYZCYTJCJXCKCWDKKZXSGKDZXWWYYJQYYTCYTDLLXWKCZKKLCCLZCQQDZLQLCSFQCHQHSFSMQZZLNBJJZBSJHTSZDYSJ"+ "QJPDLZCDCWJKJZZLPYCGMZWDJJBSJQZSYZYHHXJPBJYDSSXDZNCGLQMBTSFSBPDZDLZNFGFJGFSMPXJQLMBLGQCYYXBQKDJJQYRF"+ "KZTJDHCZKLBSDZCFJTPLLJGXHYXZCSSZZXSTJYGKGCKGYOQXJPLZPBPGTGYJZGHZQZZLBJLSQFZGKQQJZGYCZBZQTLDXRJXBSXXP"+ "ZXHYZYCLWDXJJHXMFDZPFZHQHQMQGKSLYHTYCGFRZGNQXCLPDLBZCSCZQLLJBLHBZCYPZZPPDYMZZSGYHCKCPZJGSLJLNSCDSLDL"+ "XBMSTLDDFJMKDJDHZLZXLSZQPQPGJLLYBDSZGQLBZLSLKYYHZTTNTJYQTZZPSZQZTLLJTYYLLQLLQYZQLBDZLSLYYZYMDFSZSNHL"+ "XZNCZQZPBWSKRFBSYZMTHBLGJPMCZZLSTLXSHTCSYZLZBLFEQHLXFLCJLYLJQCBZLZJHHSSTBRMHXZHJZCLXFNBGXGTQJCZTMSFZ"+ "KJMSSNXLJKBHSJXNTNLZDNTLMSJXGZJYJCZXYJYJWRWWQNZTNFJSZPZSHZJFYRDJSFSZJZBJFZQZZHZLXFYSBZQLZSGYFTZDCSZX"+ "ZJBQMSZKJRHYJZCKMJKHCHGTXKXQGLXPXFXTRTYLXJXHDTSJXHJZJXZWZLCQSBTXWXGXTXXHXFTSDKFJHZYJFJXRZSDLLLTQSQQZ"+ "QWZXSYQTWGWBZCGZLLYZBCLMQQTZHZXZXLJFRMYZFLXYSQXXJKXRMQDZDMMYYBSQBHGZMWFWXGMXLZPYYTGZYCCDXYZXYWGSYJYZ"+ "NBHPZJSQSYXSXRTFYZGRHZTXSZZTHCBFCLSYXZLZQMZLMPLMXZJXSFLBYZMYQHXJSXRXSQZZZSSLYFRCZJRCRXHHZXQYDYHXSJJH"+ "ZCXZBTYNSYSXJBQLPXZQPYMLXZKYXLXCJLCYSXXZZLXDLLLJJYHZXGYJWKJRWYHCPSGNRZLFZWFZZNSXGXFLZSXZZZBFCSYJDBRJ"+ "KRDHHGXJLJJTGXJXXSTJTJXLYXQFCSGSWMSBCTLQZZWLZZKXJMLTMJYHSDDBXGZHDLBMYJFRZFSGCLYJBPMLYSMSXLSZJQQHJZFX"+ "GFQFQBPXZGYYQXGZTCQWYLTLGWSGWHRLFSFGZJMGMGBGTJFSYZZGZYZAFLSSPMLPFLCWBJZCLJJMZLPJJLYMQDMYYYFBGYGYZMLY"+ "ZDXQYXRQQQHSYYYQXYLJTYXFSFSLLGNQCYHYCWFHCCCFXPYLYPLLZYXXXXXKQHHXSHJZCFZSCZJXCPZWHHHHHAPYLQALPQAFYHXD"+ "YLUKMZQGGGDDESRNNZLTZGCHYPPYSQJJHCLLJTOLNJPZLJLHYMHEYDYDSQYCDDHGZUNDZCLZYZLLZNTNYZGSLHSLPJJBDGWXPCDU"+ "TJCKLKCLWKLLCASSTKZZDNQNTTLYYZSSYSSZZRYLJQKCQDHHCRXRZYDGRGCWCGZQFFFPPJFZYNAKRGYWYQPQXXFKJTSZZXSWZDDF"+ "BBXTBGTZKZNPZZPZXZPJSZBMQHKCYXYLDKLJNYPKYGHGDZJXXEAHPNZKZTZCMXCXMMJXNKSZQNMNLWBWWXJKYHCPSTMCSQTZJYXT"+ "PCTPDTNNPGLLLZSJLSPBLPLQHDTNJNLYYRSZFFJFQWDPHZDWMRZCCLODAXNSSNYZRESTYJWJYJDBCFXNMWTTBYLWSTSZGYBLJPXG"+ "LBOCLHPCBJLTMXZLJYLZXCLTPNCLCKXTPZJSWCYXSFYSZDKNTLBYJCYJLLSTGQCBXRYZXBXKLYLHZLQZLNZCXWJZLJZJNCJHXMNZ"+ "ZGJZZXTZJXYCYYCXXJYYXJJXSSSJSTSSTTPPGQTCSXWZDCSYFPTFBFHFBBLZJCLZZDBXGCXLQPXKFZFLSYLTUWBMQJHSZBMDDBCY"+ "SCCLDXYCDDQLYJJWMQLLCSGLJJSYFPYYCCYLTJANTJJPWYCMMGQYYSXDXQMZHSZXPFTWWZQSWQRFKJLZJQQYFBRXJHHFWJJZYQAZ"+ "MYFRHCYYBYQWLPEXCCZSTYRLTTDMQLYKMBBGMYYJPRKZNPBSXYXBHYZDJDNGHPMFSGMWFZMFQMMBCMZZCJJLCNUXYQLMLRYGQZCY"+ "XZLWJGCJCGGMCJNFYZZJHYCPRRCMTZQZXHFQGTJXCCJEAQCRJYHPLQLSZDJRBCQHQDYRHYLYXJSYMHZYDWLDFRYHBPYDTSSCNWBX"+ "GLPZMLZZTQSSCPJMXXYCSJYTYCGHYCJWYRXXLFEMWJNMKLLSWTXHYYYNCMMCWJDQDJZGLLJWJRKHPZGGFLCCSCZMCBLTBHBQJXQD"+ "SPDJZZGKGLFQYWBZYZJLTSTDHQHCTCBCHFLQMPWDSHYYTQWCNZZJTLBYMBPDYYYXSQKXWYYFLXXNCWCXYPMAELYKKJMZZZBRXYYQ"+ "JFLJPFHHHYTZZXSGQQMHSPGDZQWBWPJHZJDYSCQWZKTXXSQLZYYMYSDZGRXCKKUJLWPYSYSCSYZLRMLQSYLJXBCXTLWDQZPCYCYK"+ "PPPNSXFYZJJRCEMHSZMSXLXGLRWGCSTLRSXBZGBZGZTCPLUJLSLYLYMTXMTZPALZXPXJTJWTCYYZLBLXBZLQMYLXPGHDSLSSDMXM"+ "BDZZSXWHAMLCZCPJMCNHJYSNSYGCHSKQMZZQDLLKABLWJXSFMOCDXJRRLYQZKJMYBYQLYHETFJZFRFKSRYXFJTWDSXXSYSQJYSLY"+ "XWJHSNLXYYXHBHAWHHJZXWMYLJCSSLKYDZTXBZSYFDXGXZJKHSXXYBSSXDPYNZWRPTQZCZENYGCXQFJYKJBZMLJCMQQXUOXSLYXX"+ "LYLLJDZBTYMHPFSTTQQWLHOKYBLZZALZXQLHZWRRQHLSTMYPYXJJXMQSJFNBXYXYJXXYQYLTHYLQYFMLKLJTMLLHSZWKZHLJMLHL"+ "JKLJSTLQXYLMBHHLNLZXQJHXCFXXLHYHJJGBYZZKBXSCQDJQDSUJZYYHZHHMGSXCSYMXFEBCQWWRBPYYJQTYZCYQYQQZYHMWFFHG"+ "ZFRJFCDPXNTQYZPDYKHJLFRZXPPXZDBBGZQSTLGDGYLCQMLCHHMFYWLZYXKJLYPQHSYWMQQGQZMLZJNSQXJQSYJYCBEHSXFSZPXZ"+ "WFLLBCYYJDYTDTHWZSFJMQQYJLMQXXLLDTTKHHYBFPWTYYSQQWNQWLGWDEBZWCMYGCULKJXTMXMYJSXHYBRWFYMWFRXYQMXYSZTZ"+ "ZTFYKMLDHQDXWYYNLCRYJBLPSXCXYWLSPRRJWXHQYPHTYDNXHHMMYWYTZCSQMTSSCCDALWZTCPQPYJLLQZYJSWXMZZMMYLMXCLMX"+ "CZMXMZSQTZPPQQBLPGXQZHFLJJHYTJSRXWZXSCCDLXTYJDCQJXSLQYCLZXLZZXMXQRJMHRHZJBHMFLJLMLCLQNLDXZLLLPYPSYJY"+ "SXCQQDCMQJZZXHNPNXZMEKMXHYKYQLXSXTXJYYHWDCWDZHQYYBGYBCYSCFGPSJNZDYZZJZXRZRQJJYMCANYRJTLDPPYZBSTJKXXZ"+ "YPFDWFGZZRPYMTNGXZQBYXNBUFNQKRJQZMJEGRZGYCLKXZDSKKNSXKCLJSPJYYZLQQJYBZSSQLLLKJXTBKTYLCCDDBLSPPFYLGYD"+ "TZJYQGGKQTTFZXBDKTYYHYBBFYTYYBCLPDYTGDHRYRNJSPTCSNYJQHKLLLZSLYDXXWBCJQSPXBPJZJCJDZFFXXBRMLAZHCSNDLBJ"+ "DSZBLPRZTSWSBXBCLLXXLZDJZSJPYLYXXYFTFFFBHJJXGBYXJPMMMPSSJZJMTLYZJXSWXTYLEDQPJMYGQZJGDJLQJWJQLLSJGJGY"+ "GMSCLJJXDTYGJQJQJCJZCJGDZZSXQGSJGGCXHQXSNQLZZBXHSGZXCXYLJXYXYYDFQQJHJFXDHCTXJYRXYSQTJXYEFYYSSYYJXNCY"+ "ZXFXMSYSZXYYSCHSHXZZZGZZZGFJDLTYLNPZGYJYZYYQZPBXQBDZTZCZYXXYHHSQXSHDHGQHJHGYWSZTMZMLHYXGEBTYLZKQWYTJ"+ "ZRCLEKYSTDBCYKQQSAYXCJXWWGSBHJYZYDHCSJKQCXSWXFLTYNYZPZCCZJQTZWJQDZZZQZLJJXLSBHPYXXPSXSHHEZTXFPTLQYZZ"+ "XHYTXNCFZYYHXGNXMYWXTZSJPTHHGYMXMXQZXTSBCZYJYXXTYYZYPCQLMMSZMJZZLLZXGXZAAJZYXJMZXWDXZSXZDZXLEYJJZQBH"+ "ZWZZZQTZPSXZTDSXJJJZNYAZPHXYYSRNQDTHZHYYKYJHDZXZLSWCLYBZYECWCYCRYLCXNHZYDZYDYJDFRJJHTRSQTXYXJRJHOJYN"+ "XELXSFSFJZGHPZSXZSZDZCQZBYYKLSGSJHCZSHDGQGXYZGXCHXZJWYQWGYHKSSEQZZNDZFKWYSSTCLZSTSYMCDHJXXYWEYXCZAYD"+ "MPXMDSXYBSQMJMZJMTZQLPJYQZCGQHXJHHLXXHLHDLDJQCLDWBSXFZZYYSCHTYTYYBHECXHYKGJPXHHYZJFXHWHBDZFYZBCAPNPG"+ "NYDMSXHMMMMAMYNBYJTMPXYYMCTHJBZYFCGTYHWPHFTWZZEZSBZEGPFMTSKFTYCMHFLLHGPZJXZJGZJYXZSBBQSCZZLZCCSTPGXM"+ "JSFTCCZJZDJXCYBZLFCJSYZFGSZLYBCWZZBYZDZYPSWYJZXZBDSYUXLZZBZFYGCZXBZHZFTPBGZGEJBSTGKDMFHYZZJHZLLZZGJQ"+ "ZLSFDJSSCBZGPDLFZFZSZYZYZSYGCXSNXXCHCZXTZZLJFZGQSQYXZJQDCCZTQCDXZJYQJQCHXZTDLGSCXZSYQJQTZWLQDQZTQCHQ"+ "QJZYEZZZPBWKDJFCJPZTYPQYQTTYNLMBDKTJZPQZQZZFPZSBNJLGYJDXJDZZKZGQKXDLPZJTCJDQBXDJQJSTCKNXBXZMSLYJCQMT"+ "JQWWCJQNJNLLLHJCWQTBZQYDZCZPZZDZYDDCYZZZCCJTTJFZDPRRTZTJDCQTQZDTJNPLZBCLLCTZSXKJZQZPZLBZRBTJDCXFCZDB"+ "CCJJLTQQPLDCGZDBBZJCQDCJWYNLLZYZCCDWLLXWZLXRXNTQQCZXKQLSGDFQTDDGLRLAJJTKUYMKQLLTZYTDYYCZGJWYXDXFRSKS"+ "TQTENQMRKQZHHQKDLDAZFKYPBGGPZREBZZYKZZSPEGJXGYKQZZZSLYSYYYZWFQZYLZZLZHWCHKYPQGNPGBLPLRRJYXCCSYYHSFZF"+ "YBZYYTGZXYLXCZWXXZJZBLFFLGSKHYJZEYJHLPLLLLCZGXDRZELRHGKLZZYHZLYQSZZJZQLJZFLNBHGWLCZCFJYSPYXZLZLXGCCP"+ "ZBLLCYBBBBUBBCBPCRNNZCZYRBFSRLDCGQYYQXYGMQZWTZYTYJXYFWTEHZZJYWLCCNTZYJJZDEDPZDZTSYQJHDYMBJNYJZLXTSST"+ "PHNDJXXBYXQTZQDDTJTDYYTGWSCSZQFLSHLGLBCZPHDLYZJYCKWTYTYLBNYTSDSYCCTYSZYYEBHEXHQDTWNYGYCLXTSZYSTQMYGZ"+ "AZCCSZZDSLZCLZRQXYYELJSBYMXSXZTEMBBLLYYLLYTDQYSHYMRQWKFKBFXNXSBYCHXBWJYHTQBPBSBWDZYLKGZSKYHXQZJXHXJX"+ "GNLJKZLYYCDXLFYFGHLJGJYBXQLYBXQPQGZTZPLNCYPXDJYQYDYMRBESJYYHKXXSTMXRCZZYWXYQYBMCLLYZHQYZWQXDBXBZWZMS"+ "LPDMYSKFMZKLZCYQYCZLQXFZZYDQZPZYGYJYZMZXDZFYFYTTQTZHGSPCZMLCCYTZXJCYTJMKSLPZHYSNZLLYTPZCTZZCKTXDHXXT"+ "QCYFKSMQCCYYAZHTJPCYLZLYJBJXTPNYLJYYNRXSYLMMNXJSMYBCSYSYLZYLXJJQYLDZLPQBFZZBLFNDXQKCZFYWHGQMRDSXYCYT"+ "XNQQJZYYPFZXDYZFPRXEJDGYQBXRCNFYYQPGHYJDYZXGRHTKYLNWDZNTSMPKLBTHBPYSZBZTJZSZZJTYYXZPHSSZZBZCZPTQFZMY"+ "FLYPYBBJQXZMXXDJMTSYSKKBJZXHJCKLPSMKYJZCXTMLJYXRZZQSLXXQPYZXMKYXXXJCLJPRMYYGADYSKQLSNDHYZKQXZYZTCGHZ"+ "TLMLWZYBWSYCTBHJHJFCWZTXWYTKZLXQSHLYJZJXTMPLPYCGLTBZZTLZJCYJGDTCLKLPLLQPJMZPAPXYZLKKTKDZCZZBNZDYDYQZ"+ "JYJGMCTXLTGXSZLMLHBGLKFWNWZHDXUHLFMKYSLGXDTWWFRJEJZTZHYDXYKSHWFZCQSHKTMQQHTZHYMJDJSKHXZJZBZZXYMPAGQM"+ "STPXLSKLZYNWRTSQLSZBPSPSGZWYHTLKSSSWHZZLYYTNXJGMJSZSUFWNLSOZTXGXLSAMMLBWLDSZYLAKQCQCTMYCFJBSLXCLZZCL"+ "XXKSBZQCLHJPSQPLSXXCKSLNHPSFQQYTXYJZLQLDXZQJZDYYDJNZPTUZDSKJFSLJHYLZSQZLBTXYDGTQFDBYAZXDZHZJNHHQBYKN"+ "XJJQCZMLLJZKSPLDYCLBBLXKLELXJLBQYCXJXGCNLCQPLZLZYJTZLJGYZDZPLTQCSXFDMNYCXGBTJDCZNBGBQYQJWGKFHTNPYQZQ"+ "GBKPBBYZMTJDYTBLSQMPSXTBNPDXKLEMYYCJYNZCTLDYKZZXDDXHQSHDGMZSJYCCTAYRZLPYLTLKXSLZCGGEXCLFXLKJRTLQJAQZ"+ "NCMBYDKKCXGLCZJZXJHPTDJJMZQYKQSECQZDSHHADMLZFMMZBGNTJNNLGBYJBRBTMLBYJDZXLCJLPLDLPCQDHLXZLYCBLCXZZJAD"+ "JLNZMMSSSMYBHBSQKBHRSXXJMXSDZNZPXLGBRHWGGFCXGMSKLLTSJYYCQLTSKYWYYHYWXBXQYWPYWYKQLSQPTNTKHQCWDQKTWPXX"+ "HCPTHTWUMSSYHBWCRWXHJMKMZNGWTMLKFGHKJYLSYYCXWHYECLQHKQHTTQKHFZLDXQWYZYYDESBPKYRZPJFYYZJCEQDZZDLATZBB"+ "FJLLCXDLMJSSXEGYGSJQXCWBXSSZPDYZCXDNYXPPZYDLYJCZPLTXLSXYZYRXCYYYDYLWWNZSAHJSYQYHGYWWAXTJZDAXYSRLTDPS"+ "SYYFNEJDXYZHLXLLLZQZSJNYQYQQXYJGHZGZCYJCHZLYCDSHWSHJZYJXCLLNXZJJYYXNFXMWFPYLCYLLABWDDHWDXJMCXZTZPMLQ"+ "ZHSFHZYNZTLLDYWLSLXHYMMYLMBWWKYXYADTXYLLDJPYBPWUXJMWMLLSAFDLLYFLBHHHBQQLTZJCQJLDJTFFKMMMBYTHYGDCQRDD"+ "WRQJXNBYSNWZDBYYTBJHPYBYTTJXAAHGQDQTMYSTQXKBTZPKJLZRBEQQSSMJJBDJOTGTBXPGBKTLHQXJJJCTHXQDWJLWRFWQGWSH"+ "CKRYSWGFTGYGBXSDWDWRFHWYTJJXXXJYZYSLPYYYPAYXHYDQKXSHXYXGSKQHYWFDDDPPLCJLQQEEWXKSYYKDYPLTJTHKJLTCYYHH"+ "JTTPLTZZCDLTHQKZXQYSTEEYWYYZYXXYYSTTJKLLPZMCYHQGXYHSRMBXPLLNQYDQHXSXXWGDQBSHYLLPJJJTHYJKYPPTHYYKTYEZ"+ "YENMDSHLCRPQFDGFXZPSFTLJXXJBSWYYSKSFLXLPPLBBBLBSFXFYZBSJSSYLPBBFFFFSSCJDSTZSXZRYYSYFFSYZYZBJTBCTSBSD"+ "HRTJJBYTCXYJEYLXCBNEBJDSYXYKGSJZBXBYTFZWGENYHHTHZHHXFWGCSTBGXKLSXYWMTMBYXJSTZSCDYQRCYTWXZFHMYMCXLZNS"+ "DJTTTXRYCFYJSBSDYERXJLJXBBDEYNJGHXGCKGSCYMBLXJMSZNSKGXFBNBPTHFJAAFXYXFPXMYPQDTZCXZZPXRSYWZDLYBBKTYQP"+ "QJPZYPZJZNJPZJLZZFYSBTTSLMPTZRTDXQSJEHBZYLZDHLJSQMLHTXTJECXSLZZSPKTLZKQQYFSYGYWPCPQFHQHYTQXZKRSGTTSQ"+ "CZLPTXCDYYZXSQZSLXLZMYCPCQBZYXHBSXLZDLTCDXTYLZJYYZPZYZLTXJSJXHLPMYTXCQRBLZSSFJZZTNJYTXMYJHLHPPLCYXQJ"+ "QQKZZSCPZKSWALQSBLCCZJSXGWWWYGYKTJBBZTDKHXHKGTGPBKQYSLPXPJCKBMLLXDZSTBKLGGQKQLSBKKTFXRMDKBFTPZFRTBBR"+ "FERQGXYJPZSSTLBZTPSZQZSJDHLJQLZBPMSMMSXLQQNHKNBLRDDNXXDHDDJCYYGYLXGZLXSYGMQQGKHBPMXYXLYTQWLWGCPBMQXC"+ "YZYDRJBHTDJYHQSHTMJSBYPLWHLZFFNYPMHXXHPLTBQPFBJWQDBYGPNZTPFZJGSDDTQSHZEAWZZYLLTYYBWJKXXGHLFKXDJTMSZS"+ "QYNZGGSWQSPHTLSSKMCLZXYSZQZXNCJDQGZDLFNYKLJCJLLZLMZZNHYDSSHTHZZLZZBBHQZWWYCRZHLYQQJBEYFXXXWHSRXWQHWP"+ "SLMSSKZTTYGYQQWRSLALHMJTQJSMXQBJJZJXZYZKXBYQXBJXSHZTSFJLXMXZXFGHKZSZGGYLCLSARJYHSLLLMZXELGLXYDJYTLFB"+ "HBPNLYZFBBHPTGJKWETZHKJJXZXXGLLJLSTGSHJJYQLQZFKCGNNDJSSZFDBCTWWSEQFHQJBSAQTGYPQLBXBMMYWXGSLZHGLZGQYF"+ "LZBYFZJFRYSFMBYZHQGFWZSYFYJJPHZBYYZFFWODGRLMFTWLBZGYCQXCDJYGZYYYYTYTYDWEGAZYHXJLZYYHLRMGRXXZCLHNELJJ"+ "TJTPWJYBJJBXJJTJTEEKHWSLJPLPSFYZPQQBDLQJJTYYQLYZKDKSQJYYQZLDQTGJQYZJSUCMRYQTHTEJMFCTYHYPKMHYZWJDQFHY"+ "YXWSHCTXRLJHQXHCCYYYJLTKTTYTMXGTCJTZAYYOCZLYLBSZYWJYTSJYHBYSHFJLYGJXXTMZYYLTXXYPZLXYJZYZYYPNHMYMDYYL"+ "BLHLSYYQQLLNJJYMSOYQBZGDLYXYLCQYXTSZEGXHZGLHWBLJHEYXTWQMAKBPQCGYSHHEGQCMWYYWLJYJHYYZLLJJYLHZYHMGSLJL"+ "JXCJJYCLYCJPCPZJZJMMYLCQLNQLJQJSXYJMLSZLJQLYCMMHCFMMFPQQMFYLQMCFFQMMMMHMZNFHHJGTTHHKHSLNCHHYQDXTMMQD"+ "CYZYXYQMYQYLTDCYYYZAZZCYMZYDLZFFFMMYCQZWZZMABTBYZTDMNZZGGDFTYPCGQYTTSSFFWFDTZQSSYSTWXJHXYTSXXYLBYQHW"+ "WKXHZXWZNNZZJZJJQJCCCHYYXBZXZCYZTLLCQXYNJYCYYCYNZZQYYYEWYCZDCJYCCHYJLBTZYYCQWMPWPYMLGKDLDLGKQQBGYCHJ"+ "XY";public static int getUnicodeFromGBK(String text) {int unicode = 0;byte buff[] = null;String str = text;if (str == null || str.length() <= 0)return unicode;// 如果进入的串长度大于1,则只返回第一个字的Unicode值if (str.length() > 1)str = text.substring(0, 1);try {// 取得字的Unicode值,其中buff[0],buff[1]为Unicode的标识,而buff[3]为Unicode值的高位字节,buff[2]为Unicode值的低位字节// buff = str.getBytes ( "Unicode" ); //// 不用直接用"Unicode",因为有的JRE环境下可能高低位会相反不统一,因此使用"UnicodeLittle"则会统一要求低位在前,相反"UnicodeBig"则是统一要求高位在前buff = str.getBytes("UnicodeLittle");unicode = (((int) (buff[3]) << 8) & 0xff00)+ ((int) (buff[2]) & 0x00ff);} catch (Exception e) {e.printStackTrace();}return unicode;}/*** 根据输入的源串(中文或中西文混合)返回其拼音首字母,以小写返回,如果首字符非拼音字母,则统一返回""* * @param str* @return*/public static String getFirstCharOfString(String str) {String firstchar = "";int unicode = getUnicodeFromGBK(str);if (unicode >= 19968 && unicode <= 40869)firstchar = GBK2UNICODE.substring(unicode - 19968,unicode - 19968 + 1);return firstchar.toLowerCase();}/*** 根据输入的源串(中文或中西文混合)返回其拼音首字母串,如果中间有非字母符号则保留* * @param str* @return*/public static String getSimpleCharsOfString(String str) {String chars = "";String firstchar = "";if (str == null)return chars;for (int i = 0; i < str.length(); i++) {firstchar = getFirstCharOfString(String.valueOf(str.charAt(i)));if (firstchar.length() <= 0)firstchar = String.valueOf(str.charAt(i));chars += firstchar;}return chars;}/*** 根据输入的源串(中文或中西文混合)返回其拼音首字母串,如果中间有非字母符号则保留,但,如果中间有空格则"吃"掉* * @param str* @return*/public static String getSimpleCharsOfStringByTrim(String str) {String chars = "";String firstchar = "";if (str == null)return chars;for (int i = 0; i < str.length(); i++) {firstchar = getFirstCharOfString(String.valueOf(str.charAt(i)));if (firstchar.length() <= 0) {if (str.charAt(i) != ' ')firstchar = String.valueOf(str.charAt(i));}chars += firstchar;}return chars;}
}
这个工具类是我目前实现最好效果的一个,我暂时还没有发现太多问题,基本上能够用。
下面是我修改过后的搜索方法
[java] view plain copy print ?
  1. /**
  2. * 按号码-拼音搜索联系人
  3. *
  4. * @param str
  5. */
  6. public static ArrayList<Contact> search(final String str,
  7. final ArrayList<Contact> allContacts) {
  8. ArrayList<Contact> contactList = new ArrayList<Contact>();
  9. // 如果搜索条件以0 1 +开头则按号码搜索
  10. if (str.startsWith("0") || str.startsWith("1") || str.startsWith("+")) {
  11. for (Contact contact : allContacts) {
  12. if (contact.getNumber() != null && contact.getName() != null) {
  13. if (contact.getNumber().contains(str)
  14. || contact.getName().contains(str)) {
  15. contact.setGroup(str);
  16. contactList.add(contact);
  17. }
  18. }
  19. }
  20. return contactList;
  21. }
  22. // final ChineseSpelling finder = ChineseSpelling.getInstance();
  23. // finder.setResource(str);
  24. // final String result = finder.getSpelling();
  25. // 先将输入的字符串转换为拼音
  26. // final String result = PinYinUtil.getFullSpell(str);
  27. final String result = PinYin.getPinYin(str);
  28. for (Contact contact : allContacts) {
  29. if (contains(contact, result)) {
  30. contactList.add(contact);
  31. }
  32. }
  33. return contactList;
  34. }
/*** 按号码-拼音搜索联系人* * @param str*/public static ArrayList<Contact> search(final String str,final ArrayList<Contact> allContacts) {ArrayList<Contact> contactList = new ArrayList<Contact>();// 如果搜索条件以0 1 +开头则按号码搜索if (str.startsWith("0") || str.startsWith("1") || str.startsWith("+")) {for (Contact contact : allContacts) {if (contact.getNumber() != null && contact.getName() != null) {if (contact.getNumber().contains(str)|| contact.getName().contains(str)) {contact.setGroup(str);contactList.add(contact);}}}return contactList;}// final ChineseSpelling finder = ChineseSpelling.getInstance();// finder.setResource(str);// final String result = finder.getSpelling();// 先将输入的字符串转换为拼音// final String result = PinYinUtil.getFullSpell(str);final String result = PinYin.getPinYin(str);for (Contact contact : allContacts) {if (contains(contact, result)) {contactList.add(contact);}}return contactList;}
[java] view plain copy print ?
  1. /**
  2. * 根据拼音搜索
  3. *
  4. * @param str
  5. *            正则表达式
  6. * @param pyName
  7. *            拼音
  8. * @param isIncludsive
  9. *            搜索条件是否大于6个字符
  10. * @return
  11. */
  12. public static boolean contains(Contact contact, String search) {
  13. if (TextUtils.isEmpty(contact.getName()) || TextUtils.isEmpty(search)) {
  14. return false;
  15. }
  16. boolean flag = false;
  17. // 简拼匹配,如果输入在字符串长度大于6就不按首字母匹配了
  18. if (search.length() < 6) {
  19. // String firstLetters = FirstLetterUtil.getFirstLetter(contact
  20. // .getName());
  21. // 获得首字母字符串
  22. String firstLetters = UnicodeGBK2Alpha
  23. .getSimpleCharsOfString(contact.getName());
  24. // String firstLetters =
  25. // PinYinUtil.getFirstSpell(contact.getName());
  26. // 不区分大小写
  27. Pattern firstLetterMatcher = Pattern.compile("^" + search,
  28. Pattern.CASE_INSENSITIVE);
  29. flag = firstLetterMatcher.matcher(firstLetters).find();
  30. }
  31. if (!flag) { // 如果简拼已经找到了,就不使用全拼了
  32. // 全拼匹配
  33. // ChineseSpelling finder = ChineseSpelling.getInstance();
  34. // finder.setResource(contact.getName());
  35. // 不区分大小写
  36. Pattern pattern2 = Pattern
  37. .compile(search, Pattern.CASE_INSENSITIVE);
  38. Matcher matcher2 = pattern2.matcher(PinYin.getPinYin(contact
  39. .getName()));
  40. flag = matcher2.find();
  41. }
  42. return flag;
  43. }
/*** 根据拼音搜索* * @param str*            正则表达式* @param pyName*            拼音* @param isIncludsive*            搜索条件是否大于6个字符* @return*/public static boolean contains(Contact contact, String search) {if (TextUtils.isEmpty(contact.getName()) || TextUtils.isEmpty(search)) {return false;}boolean flag = false;// 简拼匹配,如果输入在字符串长度大于6就不按首字母匹配了if (search.length() < 6) {// String firstLetters = FirstLetterUtil.getFirstLetter(contact// .getName());// 获得首字母字符串String firstLetters = UnicodeGBK2Alpha.getSimpleCharsOfString(contact.getName());// String firstLetters =// PinYinUtil.getFirstSpell(contact.getName());// 不区分大小写Pattern firstLetterMatcher = Pattern.compile("^" + search,Pattern.CASE_INSENSITIVE);flag = firstLetterMatcher.matcher(firstLetters).find();}if (!flag) { // 如果简拼已经找到了,就不使用全拼了// 全拼匹配// ChineseSpelling finder = ChineseSpelling.getInstance();// finder.setResource(contact.getName());// 不区分大小写Pattern pattern2 = Pattern.compile(search, Pattern.CASE_INSENSITIVE);Matcher matcher2 = pattern2.matcher(PinYin.getPinYin(contact.getName()));flag = matcher2.find();}return flag;}

以上就是搜索模块的实现了,基本上实现中文、号码、全拼、简拼的模糊匹配,网上是很难找到关于通讯录的整体实现,小巫整理出来肯定能让有需要的人轻松很多。其实关于通讯录的实现,这并不是很完美的,肯定不同的项目有不同的需求,刚开始设计肯定很多考虑不全的,关于联系人的搜索完全可以直接到数据库搜索,无论是速度和准确性都有较好的保证。这篇博客只是介绍如何实现搜索功能罢了,关于搜索还涉及到线程同步的问题,如何保证速度和用户体验性,后续博客还会继续介绍。

android 功能模块之通讯模块四相关推荐

  1. Android GNSS 模块分析(四)HAL 层

    紧接着上一篇(Android GNSS 模块分析(三)JNI 层),继续来分析下 Android GNSS HAL 层的功能,本篇准备先介绍下 HIDL 层的封装.至于后面的 HAL 层的功能,由于使 ...

  2. Android GNSS 模块分析(五)NMEA 协议

    紧接着上一篇<Android GNSS 模块分析(四)HAL 层>,本篇简述下导航硬件设备与卫星导航系统之间的通信协议. NMEA 协议 简介: NMEA(National Marine ...

  3. Android 程序自动更新功能模块实现

    2019独角兽企业重金招聘Python工程师标准>>> Android 程序自动更新功能模块实现 在程序启动的时候检测服务器上有没有对应版本更新,如果有更新,提示用户是否更新. 在程 ...

  4. [系统安全] 四十五.APT系列(10)Metasploit后渗透技术信息收集、权限提权和功能模块详解

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  5. Android App Bundle:动态功能模块

    目录 Android App Bundle 创建动态功能模块 动态功能模块 与主模块建立关联 部署应用 按需分发On-Demand 免安装分发 自 2021 年 8 月起,Google Play 将开 ...

  6. android自动更新demo,Android程序自动更新功能模块的实现方法【附完整demo源码下载】...

    本文实例讲述了Android程序自动更新功能模块的实现方法.分享给大家供大家参考,具体如下: 在程序启动的时候检测服务器上有没有对应版本更新,如果有更新,提示用户是否更新. 在程序启动的时候首先调用更 ...

  7. ( 持续更新,目前含 200+ 工具类 ) DevUtils 是一个 Android 工具库, 主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用。

    DevUtils GitHub About ( 持续更新,目前含 200+ 工具类 ) Roadmap DevUtils 是一个 Android 工具库,主要根据不同功能模块,封装快捷使用的工具类及 ...

  8. android权限级别探索(四),Work Profile/Profile Owner的开启与功能

    一.什么是Work Profile   因为Work Profile在体验上与Device Owner和Device admin有很大的差别,所以在讲怎么开启profileOwner之前先讲一下什么是 ...

  9. Android项目分包(按功能模块)

    分包是一个开放性的问题,它并没有固定或最优的方案,但是不好的分包策略带来的影响将会一直持续在App的开发迭代周期中,给开发带来一定的麻烦:如:耦合性 ,不易维护,重用难度高 下面介绍一下一种分包策略( ...

最新文章

  1. opencv拟合高维曲线
  2. PacBio如何获得又长又准确的reads
  3. PHP面试题:windows平台, Apache Http Server启动失败, 排错思路是什么?
  4. 项目启动,数据库连接错误:SQLNonTransientConnectionException: Could not create connection to database server
  5. 迪士尼手机官方专卖东家京破产
  6. HTML-唯美二次元百度引导页面源码
  7. 栈的典型应用 —— 延迟缓冲
  8. LNMP详解(六)——Nginx location语法详解
  9. 混淆矩阵 (Confusion Matrix)
  10. Openstack实验之yum源配置
  11. CGI和FastCgi
  12. 重新实现reuseport逻辑,实现一致性哈希
  13. 半同步/半反应堆模型以及简单实现(一)
  14. 世界第 3 的滴滴裁员,求职季必知的独角兽公司排行榜
  15. php解析今日头条视频下载,今日头条视频的地址解析下载
  16. 怎么AI生成绘画图片?试试这几款软件吧
  17. codeforces1129D. Isolation
  18. 2020-09-05(面向对象相关练习题,部分附源码)
  19. 互联网 Java 工程师进阶知识完全扫盲
  20. 【Java进阶营】今天面了一个大学生:这82道SpringBoot面试题都答不上来?还想进大厂?

热门文章

  1. 安卓仿微信界面,导航,右上角菜单栏
  2. Oracle bpm实现oa,Oracle BPM/SOA API 操作流程
  3. Git 设置用户名和邮箱
  4. 液体之火,酒,写的真好 ~~
  5. ZuulException: Forwarding error java.net.UnknownHostException: DESKTOP-QBA1AHC:
  6. 将Outlook中的邮件保存到本地磁盘,释放邮箱空间
  7. VMware Workstation Pro界面设置为中文界面
  8. c语言学习--强制类型转换
  9. 服务器系统升级介绍,服务器操作系统升级方案
  10. MonoRail学习笔记三:使用方便功能强大的routing功能