pinyin utils

来源:https://www.cnblogs.com/guanzhuang/archive/2018/01/06/8214920.html
-Advertisement-
Play Games

package cn.itcast.bos.utils; import java.util.Arrays; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyin ...


package cn.itcast.bos.utils;   import java.util.Arrays;   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;   public class PinYin4jUtils {     /**     * 將字元串轉換成拼音數組     * 
    * @param src     * @return     */     public static String[] stringToPinyin(String src) {         return stringToPinyin(src, false, null);     }       /**     * 將字元串轉換成拼音數組     * 
    * @param src     * @return     */     public static String[] stringToPinyin(String src, String separator) {           return stringToPinyin(src, true, separator);     }       /**     * 將字元串轉換成拼音數組     * 
    * @param src     * @param isPolyphone     *            是否查出多音字的所有拼音     * @param separator     *            多音字拼音之間的分隔符     * @return     */     public static String[] stringToPinyin(String src, boolean isPolyphone,             String separator) {         // 判斷字元串是否為空         if ("".equals(src) || null == src) {             return null;         }         char[] srcChar = src.toCharArray();         int srcCount = srcChar.length;         String[] srcStr = new String[srcCount];           for (int i = 0; i < srcCount; i++) {             srcStr[i] = charToPinyin(srcChar[i], isPolyphone, separator);         }         return srcStr;     }       /**     * 將單個字元轉換成拼音     * 
    * @param src     * @return     */     public static String charToPinyin(char src, boolean isPolyphone,             String separator) {         // 創建漢語拼音處理類         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();         // 輸出設置,大小寫,音標方式         defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);           StringBuffer tempPinying = new StringBuffer();           // 如果是中文         if (src > 128) {             try {                 // 轉換得出結果                 String[] strs = PinyinHelper.toHanyuPinyinStringArray(src,                         defaultFormat);                   // 是否查出多音字,預設是查出多音字的第一個字元                 if (isPolyphone && null != separator) {                     for (int i = 0; i < strs.length; i++) {                         tempPinying.append(strs[i]);                         if (strs.length != (i + 1)) {                             // 多音字之間用特殊符號間隔起來                             tempPinying.append(separator);                         }                     }                 } else {                     tempPinying.append(strs[0]);                 }               } catch (BadHanyuPinyinOutputFormatCombination e) {                 e.printStackTrace();             }         } else {             tempPinying.append(src);         }           return tempPinying.toString();       }       public static String hanziToPinyin(String hanzi) {         return hanziToPinyin(hanzi, " ");     }       /**     * 將漢字轉換成拼音     * 
    * @param hanzi     * @param separator     * @return     */     public static String hanziToPinyin(String hanzi, String separator) {           // 創建漢語拼音處理類         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();         // 輸出設置,大小寫,音標方式         defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);           String pinyingStr = "";         try {             pinyingStr = PinyinHelper.toHanyuPinyinString(hanzi, defaultFormat,                     separator);         } catch (BadHanyuPinyinOutputFormatCombination e) {             // TODO Auto-generated catch block             e.printStackTrace();         }         return pinyingStr;     }       /**     * 將字元串數組轉換成字元串     * 
    * @param str     * @param separator     *            各個字元串之間的分隔符     * @return     */     public static String stringArrayToString(String[] str, String separator) {         StringBuffer sb = new StringBuffer();         for (int i = 0; i < str.length; i++) {             sb.append(str[i]);             if (str.length != (i + 1)) {                 sb.append(separator);             }         }         return sb.toString();     }       /**     * 簡單的將各個字元數組之間連接起來     * 
    * @param str     * @return     */     public static String stringArrayToString(String[] str) {         return stringArrayToString(str, "");     }       /**     * 將字元數組轉換成字元串     * 
    * @param str     * @param separator     *            各個字元串之間的分隔符     * @return     */     public static String charArrayToString(char[] ch, String separator) {         StringBuffer sb = new StringBuffer();         for (int i = 0; i < ch.length; i++) {             sb.append(ch[i]);             if (ch.length != (i + 1)) {                 sb.append(separator);             }         }         return sb.toString();     }       /**     * 將字元數組轉換成字元串     * 
    * @param str     * @return     */     public static String charArrayToString(char[] ch) {         return charArrayToString(ch, " ");     }       /**     * 取漢字的首字母     * 
    * @param src     * @param isCapital     *            是否是大寫     * @return     */     public static char[] getHeadByChar(char src, boolean isCapital) {         // 如果不是漢字直接返回         if (src <= 128) {             return new char[] { src };         }         // 獲取所有的拼音         String[] pinyingStr = PinyinHelper.toHanyuPinyinStringArray(src);           // 創建返回對象         int polyphoneSize = pinyingStr.length;         char[] headChars = new char[polyphoneSize];         int i = 0;         // 截取首字元         for (String s : pinyingStr) {             char headChar = s.charAt(0);             // 首字母是否大寫,預設是小寫             if (isCapital) {                 headChars[i] = Character.toUpperCase(headChar);             } else {                 headChars[i] = headChar;             }             i++;         }           return headChars;     }       /**     * 取漢字的首字母(預設是大寫)     * 
    * @param src     * @return     */     public static char[] getHeadByChar(char src) {         return getHeadByChar(src, true);     }       /**     * 查找字元串首字母     * 
    * @param src     * @return     */     public static String[] getHeadByString(String src) {         return getHeadByString(src, true);     }       /**     * 查找字元串首字母     * 
    * @param src     * @param isCapital     *            是否大寫     * @return     */     public static String[] getHeadByString(String src, boolean isCapital) {         return getHeadByString(src, isCapital, null);     }       /**     * 查找字元串首字母     * 
    * @param src     * @param isCapital     *            是否大寫     * @param separator     *            分隔符     * @return     */     public static String[] getHeadByString(String src, boolean isCapital,             String separator) {         char[] chars = src.toCharArray();         String[] headString = new String[chars.length];         int i = 0;         for (char ch : chars) {               char[] chs = getHeadByChar(ch, isCapital);             StringBuffer sb = new StringBuffer();             if (null != separator) {                 int j = 1;                   for (char ch1 : chs) {                     sb.append(ch1);                     if (j != chs.length) {                         sb.append(separator);                     }                     j++;                 }             } else {                 sb.append(chs[0]);             }             headString[i] = sb.toString();             i++;         }         return headString;     }     
    public static void main(String[] args) {         // pin4j 簡碼 和 城市編碼 
        String s1 = "中華人民共和國"; 
        String[] headArray = getHeadByString(s1); // 獲得每個漢字拼音首字母         System.out.println(Arrays.toString(headArray));         
        String s2 ="長城" ; 
        System.out.println(Arrays.toString(stringToPinyin(s2,true,",")));         
        String s3 ="長";         System.out.println(Arrays.toString(stringToPinyin(s3,true,",")));     } }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 初次接觸 Swift,建議先看下 A Swift Tour 否則思維轉換會很費力,容易卡死或鑽牛角尖。 同樣是每一章只總結3個自己認為最重要的點。這樣挺好!強迫你去思考去取捨。以後再看,也方便快速重建記憶。 註意: 個人筆記,僅供參考,不保證嚴格意義上的正確性。 ...
  • objc 自己較為熟悉,想熟悉下風頭正勁的 swift。就先從官方的入門手冊開始擼。 每一小節,我都摘錄或總結3個對自己三觀衝擊最大的【知識點】,以方便以後溫習。總結不保證絕對正確,僅供交流之用。O(∩_∩)O哈哈~ ...
  • 一直用C#編程,在日常字元串拼接中string.Format()一直是個很好用很常用的方法,不用自己+++,既影響開發效率也影響可讀性 然而在js中並沒有這樣的函數可供使用,so整理了一個js的字元串format函數供項目的日常使用 雖然並不是很完善也不能提升拼接效率,但是足夠滿足開發過程中的工作效 ...
  • 近期項目因為怕數據污染所以用到了js的對象複製 js里的對象都是繼承自object,是引用類型,所以無法通過=號複製 所以整理了一些常用的複製方法,如下 一、通過JSON序列化和反序列化創建新的對象 測試一下: 測試結果: 然而,這個方法並不能進行深度複製,對於function屬性並不能複製到。那麼 ...
  • 如果再這樣下去,每天寫代碼的時間會越來越短的。。。 還是不夠專註啊,不能帶手機去自習的原則不能改,否則就會死的很慘。。。。 今天就只是完成了homework4而已,而且還留了些問題沒有想出答案來。 這裡採坑了,之前看老師講課的視頻的時候,沒註意sort裡面是個匿名函數,不是一般的坑,而且裡面可以不放 ...
  • Vue.js是目前很火的一個前端框架,採用MVVM模式設計,它是以數據驅動和組件化的思想構建的。相比於Angular.js,Vue.js提供了更加簡潔、更易於理解的API,使得我們能夠快速地上手並使用,特別適合單頁應用的開發。 ...
  • 1.前言 光陰似箭,日月如梭。不得不感慨時間過得很快,2017差不多結束了,一下子我從事前端開發的時間已經兩年了。這兩年可以說是一波三折,回想這兩年的經歷,讓我忍不住了寫下了這篇文章,記錄自己在這兩年經歷的種種種種。這篇文章,打算當做自己的一個經歷記錄,而對於看這篇文章的你,希望你們能從我的經歷裡面 ...
  • <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.Random"%> <%@ page import="java.io.O ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...