首页 > 移动开发 > Android通讯录开发之通讯录联系人搜索功能最新实现

Android通讯录开发之通讯录联系人搜索功能最新实现

Android通讯录开发之通讯录联系人搜索功能最新实现
2014年1月13日
之前的有两篇博客介绍了如何解决通讯录搜索功能的问题,那些方法都是从网上搜集,然后经过自己整理试验之后的,但在项目测试人员给我反馈,似乎还是存在一些问题,比如一些简拼没能搜出,或者简拼的转换有了问题,主要是因为中文的转换为简拼还是有点麻烦的,不同的编码支持的汉字又不同,比如gb2312编码支持汉字6763个汉字,并且分为两级,一级汉字3755个,二级汉字3008个,还对这两级汉字进行了分区,一级汉字是按拼音排序,二级汉字按笔画排序,所以网上提供的一些方法并没有覆盖绝大部分的汉字,才会导致有些简拼无法转换的现象。所以我还是抛弃了之前的方法,因为还是无法满足实现简拼搜索的要求。
下面小巫提供另外一个工具类,是目前我负责的项目最新的实现
[java] view plaincopyprint?

  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. }

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

下面定义一个方法获取输入字符串获取全拼
[java] view plaincopyprint?

  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. }

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

[java] view plaincopyprint?

  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. }
这个工具类是我目前实现最好效果的一个,我暂时还没有发现太多问题,基本上能够用。
下面是我修改过后的搜索方法
[java] view plaincopyprint?

  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.     }
[java] view plaincopyprint?

  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.     }

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


本文固定链接: http://www.devba.com/index.php/archives/4310.html | 开发吧

报歉!评论已关闭.