mysql查詢數(shù)據(jù)以通訊錄形式展示

<code>
在該表中添加一個(gè)用來存儲(chǔ)拼音的字段日麸,然后后再代碼中將前端傳過來的數(shù)據(jù)解析成拼音存儲(chǔ)在該字段里面漠嵌,該字段也就是用來做排序使用的哼拔,沒有其他的作用嚼黔,解析的時(shí)候代碼中可以做個(gè)判斷细层,比如:首字母非英文或者中文開頭的惜辑,給定一個(gè)排序在字母后面的符號(hào),我目前我所使用的是下劃線_,然后保存的時(shí)候根據(jù)使用的名稱
</code>

sql語(yǔ)句
 select * from table ORDER BYCONVERT (存儲(chǔ)字母的字段名稱  USING GBK) ASC; 
  下面是網(wǎng)上找的代碼 --> 中文轉(zhuǎn)換拼音代碼
// 需要一個(gè) pingyin4j jar
<!-- https://mvnrepository.com/artifact/com.belerweb/pinyin4j -->
<dependency>
    <groupId>com.belerweb</groupId>
    <artifactId>pinyin4j</artifactId>
    <version>2.5.0</version>
</dependency>
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * @project 項(xiàng)目:<>
 * @class 類名:<Pingyin4Util>
 * @author 創(chuàng)建人:<>
 * @date 創(chuàng)建時(shí)間:<2017上午10:21:36>
 * @comments: 說明:<中文轉(zhuǎn)換拼音>
 */
public class Pinyin4jUtil {
    /** 
     * 漢字轉(zhuǎn)換位漢語(yǔ)拼音首字母疫赎,英文字符不變盛撑,特殊字符丟失 支持多音字,生成方式如(長(zhǎng)沙市長(zhǎng):cssc,zssz,zssc,cssz) 
     *  
     * @param chines 
     *            漢字 
     * @return 拼音 
     */  
    public static String converterToFirstSpell(String chines) {  
        StringBuffer pinyinName = new StringBuffer();  
        char[] nameChar = chines.toCharArray();  
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();  
        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);  
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);  
        for (int i = 0; i < nameChar.length; i++) {  
            if (nameChar[i] > 128) {  
                try {  
                    // 取得當(dāng)前漢字的所有全拼  
                    String[] strs = PinyinHelper.toHanyuPinyinStringArray(  
                            nameChar[i], defaultFormat);  
                    if (strs != null) {  
                        for (int j = 0; j < strs.length; j++) {  
                            // 取首字母  
                            pinyinName.append(strs[j].charAt(0));  
                            if (j != strs.length - 1) {  
                                pinyinName.append(",");  
                            }  
                        }  
                    }  
                    // else {  
                    // pinyinName.append(nameChar[i]);  
                    // }  
                } catch (BadHanyuPinyinOutputFormatCombination e) {  
                    e.printStackTrace();  
                }  
            } else {  
                pinyinName.append(nameChar[i]);  
            }  
            pinyinName.append(" ");  
        }  
        // return pinyinName.toString();  
        return parseTheChineseByObject(discountTheChinese(pinyinName.toString()));  
    }  

    /** 
     * 漢字轉(zhuǎn)換位漢語(yǔ)全拼捧搞,英文字符不變抵卫,特殊字符丟失 
     * 支持多音字,生成方式如(重當(dāng)參:zhongdangcen,zhongdangcan,chongdangcen 
     * ,chongdangshen,zhongdangshen,chongdangcan) 
     *  
     * @param chines 
     *            漢字 
     * @return 拼音 
     */  
    public static String converterToSpell(String chines) { 
        if (chines.replace(" ", "").length() > 0) {
            StringBuffer pinyinName = new StringBuffer();  
            char[] nameChar = chines.toCharArray();  
            HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();  
            defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);  
            defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);  
            for (int i = 0; i < nameChar.length; i++) {  
                if (nameChar[i] > 128) {  
                    try {  
                        // 取得當(dāng)前漢字的所有全拼  
                        String[] strs = PinyinHelper.toHanyuPinyinStringArray(  
                                nameChar[i], defaultFormat);  
                        if (strs != null) {  
                            for (int j = 0; j < strs.length; j++) {  
                                pinyinName.append(strs[j]);  
                                if (j != strs.length - 1) {  
                                    pinyinName.append(",");  
                                }  
                            }  
                        }  
                    } catch (BadHanyuPinyinOutputFormatCombination e) {  
                        e.printStackTrace();  
                    }  
                } else {  
                    pinyinName.append(nameChar[i]);  
                }  
                pinyinName.append(" ");  
                pinyinName.append("_");  
            }  
            // return pinyinName.toString();  
            return parseTheChineseByObject(discountTheChinese(pinyinName.toString()));  
//          return parseTheChineseByObject(discountTheChinese(pinyinName.toString().substring(0, pinyinName.toString().length()-1)));  
            //            return parseTheChineseByObject(discountTheChinese(pinyinName.toString());  

        } else {
            return "";
        }


    }  

    /** 
     * 去除多音字重復(fù)數(shù)據(jù) 
     *  
     * @param theStr 
     * @return 
     */  
    private static List<Map<String, Integer>> discountTheChinese(String theStr) {  
        // 去除重復(fù)拼音后的拼音列表  
        List<Map<String, Integer>> mapList = new ArrayList<Map<String, Integer>>();  
        // 用于處理每個(gè)字的多音字胎撇,去掉重復(fù)  
        Map<String, Integer> onlyOne = null;  
        String[] firsts = theStr.split(" ");  
        // 讀出每個(gè)漢字的拼音  
        for (String str : firsts) {  
            onlyOne = new Hashtable<String, Integer>();  
            String[] china = str.split(",");  
            // 多音字處理  
            for (String s : china) {  
                Integer count = onlyOne.get(s);  
                if (count == null) {  
                    onlyOne.put(s, new Integer(1));  
                } else {  
                    onlyOne.remove(s);  
                    count++;  
                    onlyOne.put(s, count);  
                }  
            }  
            mapList.add(onlyOne);  
        }  
        return mapList;  
    }  

    /** 
     * 解析并組合拼音介粘,對(duì)象合并方案
     *  
     * @return 
     */  
    private static String parseTheChineseByObject(  
            List<Map<String, Integer>> list) {  
        Map<String, Integer> first = null; // 用于統(tǒng)計(jì)每一次,集合組合數(shù)據(jù)  
        // 遍歷每一組集合  
        for (int i = 0; i < list.size(); i++) {  
            // 每一組集合與上一次組合的Map  
            Map<String, Integer> temp = new Hashtable<String, Integer>();  
            // 第一次循環(huán),first為空  
            if (first != null) {  
                // 取出上次組合與此次集合的字符晚树,并保存  
                for (String s : first.keySet()) {  
                    for (String s1 : list.get(i).keySet()) {  
                        String str = s + s1;  
                        temp.put(str, 1);  
                    }  
                }  
                // 清理上一次組合數(shù)據(jù)  
                if (temp != null && temp.size() > 0) {  
                    first.clear();  
                }  
            } else {  
                for (String s : list.get(i).keySet()) {  
                    String str = s;  
                    temp.put(str, 1);  
                }  
            }  
            // 保存組合數(shù)據(jù)以便下次循環(huán)使用  
            if (temp != null && temp.size() > 0) {  
                first = temp;  
            }  
        }  
        String returnStr = "";  
        if (first != null) {  
            // 遍歷取出組合字符串  
            for (String str : first.keySet()) {
                returnStr += (str + ",");
 
            }
      
// 遍歷出單個(gè)拼音
        /*  List listKey = new ArrayList();
            List listValue = new ArrayList();
            Iterator it = first.keySet().iterator();
            while (it.hasNext()) {
                String key = it.next().toString();
                listKey.add(key);
                listValue.add(first.get(key));
            }

            if (listKey.size() > 1) {
                for (int i = 0; i < listKey.size(); i++) {
                    if (i==1){
                        returnStr +=  listKey.get(1);
                    } 
                }
            } else{
                returnStr += listKey.get(0);
            }
        }  */
        if (returnStr.length() > 0) {  
            returnStr = returnStr.substring(0, returnStr.length() - 1);  
        }  
        return returnStr;  
    }

    public static void main(String[] args) {
        String str = "你好??你好????";
//      System.out.println(getPingYin(str));
        String pinyin = Pinyin4jUtil.converterToSpell(str.trim());  
        System.out.println(str+" pin yin :"+pinyin.toUpperCase());
//      pinyin = Pinyin4jUtil.converterToFirstSpell(str);
//      System.out.println(str+" short pin yin :"+pinyin);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末姻采,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子题涨,更是在濱河造成了極大的恐慌偎谁,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纲堵,死亡現(xiàn)場(chǎng)離奇詭異巡雨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)席函,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門铐望,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茂附,你說我怎么就攤上這事正蛙。” “怎么了营曼?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵乒验,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我蒂阱,道長(zhǎng)锻全,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任录煤,我火速辦了婚禮鳄厌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘妈踊。我一直安慰自己了嚎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著歪泳,像睡著了一般萝勤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夹囚,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天纵刘,我揣著相機(jī)與錄音,去河邊找鬼荸哟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瞬捕,可吹牛的內(nèi)容都是我干的鞍历。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肪虎,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼劣砍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起扇救,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤刑枝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后迅腔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體装畅,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年沧烈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掠兄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锌雀,死狀恐怖蚂夕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情腋逆,我是刑警寧澤婿牍,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站惩歉,受9級(jí)特大地震影響等脂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜柬泽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一慎菲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锨并,春花似錦露该、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)抑党。三九已至,卻和暖如春撵摆,著一層夾襖步出監(jiān)牢的瞬間底靠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工特铝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留暑中,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓鲫剿,卻偏偏與公主長(zhǎng)得像鳄逾,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灵莲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理雕凹,服務(wù)發(fā)現(xiàn),斷路器政冻,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 1枚抵、引言 數(shù)據(jù)庫(kù)設(shè)計(jì)過程中表、字段等的命名規(guī)范也算是設(shè)計(jì)規(guī)范的一部分明场,不過設(shè)計(jì)規(guī)范更多的是為了確保數(shù)據(jù)庫(kù)設(shè)計(jì)的合理...
    SnowflakeCloud閱讀 40,999評(píng)論 0 48
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,147評(píng)論 25 707
  • 這是有一次上課時(shí),老師讓我們體驗(yàn)的一個(gè)小活動(dòng)逆屡。老師讓我們每一個(gè)學(xué)員把生命中記憶深刻的圾旨,曾經(jīng)有人對(duì)自己說過的鼓勵(lì)的話...
    正好閑聊閱讀 556評(píng)論 1 3
  • 又近了一天
    168a68f05a25閱讀 116評(píng)論 1 0