欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實(shí)現(xiàn)漢字轉(zhuǎn)拼音

 更新時(shí)間:2015年12月25日 16:17:46   作者:xiaojimanman  
這篇文章主要介紹了java實(shí)現(xiàn)漢字轉(zhuǎn)拼音的功能,感興趣的小伙伴們可以參考一下

一、問題描述
漢字轉(zhuǎn)化為對(duì)應(yīng)的拼音或者獲取漢字拼音的首字母,這些都是在開發(fā)中經(jīng)常遇到的問題,在獲取漢字的拼音或者拼音的首字母之后,我們?cè)谕扑]或者搜索部門可以很大程度提高用戶的體驗(yàn),比如用戶輸入“NH”,我們就可以聯(lián)想出“你好”、“你會(huì)”、“年后”、“內(nèi)涵”等詞語。在Java中,pinyin4j.jar這個(gè)工具很好實(shí)現(xiàn)了將漢字轉(zhuǎn)化為對(duì)應(yīng)的拼音,下面我們就介紹下如何使用這個(gè)jar包。

二、資源下載
下載之后解壓,直接使用文件中的pinyin4j-2.5.0.jar即可。

三、提供方法
我們可以使用HanyuPinyinOutputFormat類來設(shè)置拼音的返回方式,比如設(shè)置拼音的大小寫、音標(biāo)方式以及拼音ü的顯示形式,具體如下圖:

直接使用PinyinHelper中的方法來對(duì)漢字做對(duì)應(yīng)的轉(zhuǎn)化,具體有如下三種,三種效果如何自己做下測試即可:

四、編寫代碼
針對(duì)我們平常可能用到的功能,我做了如下的封裝,提供的功能還有具體的實(shí)現(xiàn)步驟參照代碼中的注釋:

package com.lulei.util; 
import java.util.ArrayList; 
import java.util.List; 
 
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.HanyuPinyinVCharType; 
  
public class PinYinUtil { 
  private static HanyuPinyinOutputFormat format = null; 
  static { 
    format = new HanyuPinyinOutputFormat(); 
    //拼音小寫 
    format.setCaseType(HanyuPinyinCaseType.LOWERCASE); 
    //無音標(biāo)方式;WITH_TONE_NUMBER:1-4數(shù)字表示英標(biāo);WITH_TONE_MARK:直接用音標(biāo)符(必須WITH_U_UNICODE否則異常 
    format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); 
    //用v表示ü 
    format.setVCharType(HanyuPinyinVCharType.WITH_V); 
  } 
   
  /** 
   * @param str 
   * @return 
   * @Description: 返回字符串的拼音 
   */ 
  public static String[] getCharPinYinString(String str) { 
    if (str == null || str.length() < 1) { 
      return null; 
    } 
    List<String> result = new ArrayList<String>(); 
    //對(duì)字符串中的記錄逐個(gè)分析 
    for (int i = 0; i < str.length(); i++) { 
      result = getCharPinYinString(str.charAt(i), result); 
    } 
    return result.toArray(new String[result.size()]); 
  } 
   
  /** 
   * @param c 
   * @param list 
   * @return 
   * @Description: 將字符c的拼音拼接到list中的記錄中 
   */ 
  private static List<String> getCharPinYinString(char c, List<String> list) { 
    String[] strs = getCharPinYinString(c); 
    List<String> result = new ArrayList<String>(); 
    //如果解析出的拼音為空,判斷字符C是否為英文字母,如果是英文字母則添加值拼音結(jié)果中 
    if (strs == null) { 
      if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { 
        c = c <= 91 ? (char)(c + 32) : c; 
        if (list == null || list.size() == 0) { 
          result.add(c + ""); 
        } else { 
          for (String s : list) { 
            result.add(s + c); 
          } 
        } 
        return result; 
      } 
      return list; 
    } 
    //將字符C的拼音首和已存在的拼音首組合成新的記錄 
    for (String str : strs) { 
      if (list == null || list.size() == 0) { 
        result.add(str); 
      } else { 
        for (String s : list) { 
          result.add(s + str); 
        } 
      } 
    } 
    return result; 
  } 
   
  /** 
   * @param c 
   * @return 
   * @Description: 返回漢字的拼音 
   */ 
  public static String[] getCharPinYinString(char c) { 
    try { 
      //返回字符C的拼音 
      return PinyinHelper.toHanyuPinyinStringArray(c, format); 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
    return null; 
  } 
   
  /** 
   * @param str 
   * @return 
   * @Description: 返回字符串的拼音的首字母 
   */ 
  public static String[] getCharPinYinChar(String str) { 
    if (str == null || str.length() < 1) { 
      return null; 
    } 
    List<String> result = new ArrayList<String>(); 
    //對(duì)字符串中的記錄逐個(gè)分析 
    for (int i = 0; i < str.length(); i++) { 
      result = getCharPinYinChar(str.charAt(i), result); 
    } 
    return result.toArray(new String[result.size()]); 
  } 
   
  /** 
   * @param c 
   * @param list 
   * @return 
   * @Description: 將字符c的拼音首字母拼接到list中的記錄中 
   */ 
  private static List<String> getCharPinYinChar(char c, List<String> list) { 
    char[] chars = getCharPinYinChar(c); 
    List<String> result = new ArrayList<String>(); 
    //如果解析出的拼音為空,判斷字符C是否為英文字母,如果是英文字母則添加值拼音結(jié)果中 
    if (chars == null) { 
      if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { 
        c = c < 91 ? (char)(c + 32) : c; 
        if (list == null || list.size() == 0) { 
          result.add(c + ""); 
        } else { 
          for (String s : list) { 
            result.add(s + c); 
          } 
        } 
        return result; 
      } 
      return list; 
    } 
    //將字符C的拼音首字母和已存在的拼音首字母組合成新的記錄 
    for (char ch : chars) { 
      if (list == null || list.size() == 0) { 
        result.add(ch + ""); 
      } else { 
        for (String s : list) { 
          result.add(s + ch); 
        } 
      } 
    } 
    return result; 
  } 
   
  /** 
   * @param c 
   * @return 
   * @Description:返回漢字拼音首字母 
   */ 
  public static char[] getCharPinYinChar(char c) { 
    //字符C的拼音 
    String[] strs = getCharPinYinString(c); 
    if (strs != null) { 
      //截取拼音的首字母 
      char[] chars = new char[strs.length]; 
      for(int i = 0; i <chars.length; i++) { 
        chars[i] = strs[i].charAt(0); 
      } 
      return chars; 
    } 
    return null; 
  } 
   
  public static void main(String[] args) { 
    // TODO Auto-generated method stub  
    char c = "重慶".charAt(0); 
    String[] str = PinYinUtil.getCharPinYinString(c); 
    for(String s : str) { 
      System.out.println(s); 
    } 
     
    char[] chars = PinYinUtil.getCharPinYinChar(c); 
    for(char c1 : chars) { 
      System.out.println(c1); 
    } 
     
    str = PinYinUtil.getCharPinYinString("重慶c"); 
    for(String s : str) { 
      System.out.println(s); 
    } 
     
    str = PinYinUtil.getCharPinYinChar("重慶a"); 
    for(String s : str) { 
      System.out.println(s); 
    } 
  } 
 
} 

五、輸出結(jié)果

以上就是java實(shí)現(xiàn)漢字轉(zhuǎn)拼音的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • java加解密RSA使用方法代碼示例

    java加解密RSA使用方法代碼示例

    這篇文章主要介紹了java加解密RSA使用方法代碼示例,還是比較不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • Java實(shí)現(xiàn)畫線、矩形、橢圓、字符串功能

    Java實(shí)現(xiàn)畫線、矩形、橢圓、字符串功能

    本篇文章主要介紹了Java實(shí)現(xiàn)畫線、矩形、橢圓、字符串功能的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • Java四舍五入時(shí)保留指定小數(shù)位數(shù)的五種方式

    Java四舍五入時(shí)保留指定小數(shù)位數(shù)的五種方式

    這篇文章主要介紹了Java四舍五入時(shí)保留指定小數(shù)位數(shù)的五種方式,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-09-09
  • java回溯算法解數(shù)獨(dú)問題

    java回溯算法解數(shù)獨(dú)問題

    這篇文章主要為大家詳細(xì)介紹了java回溯算法解數(shù)獨(dú)問題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Java實(shí)現(xiàn)鏈表的常見操作算法詳解

    Java實(shí)現(xiàn)鏈表的常見操作算法詳解

    這篇文章主要介紹了Java實(shí)現(xiàn)鏈表的常見操作算法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 詳解如何在spring中創(chuàng)建全局異常處理器

    詳解如何在spring中創(chuàng)建全局異常處理器

    全局異常處理器在實(shí)際項(xiàng)目開發(fā)中是一個(gè)很重要的工具,對(duì)保證代碼的正常運(yùn)行有很重要的作用,所以下面來講一下如何在spring中創(chuàng)建一個(gè)全局異常處理器,感興趣的的朋友可以參考下
    2023-12-12
  • SpringBoot?分模塊開發(fā)的操作方法

    SpringBoot?分模塊開發(fā)的操作方法

    這篇文章主要介紹了SpringBoot?分模塊開發(fā)的操作方法,通過在原項(xiàng)目新增一個(gè)maven模塊,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • mybatis 無參構(gòu)造器的使用

    mybatis 無參構(gòu)造器的使用

    本文主要介紹了MyBatis中無參構(gòu)造器的重要性和應(yīng)用,無參構(gòu)造器在Java類中具有特殊的意義,它確保了即使在沒有提供任何參數(shù)的情況下,也能夠創(chuàng)建對(duì)象并對(duì)其進(jìn)行初始化,下面就來介紹一下
    2024-10-10
  • Java純代碼實(shí)現(xiàn)導(dǎo)出文件為壓縮包

    Java純代碼實(shí)現(xiàn)導(dǎo)出文件為壓縮包

    這篇文章主要為大家詳細(xì)介紹了Java如何代碼實(shí)現(xiàn)導(dǎo)出文件為壓縮包,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • 在SpringBoot框架下實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出的方法詳解

    在SpringBoot框架下實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出的方法詳解

    SpringBoot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程,今天我們就使用純前對(duì)按表格控件帶大家了解,如何在Spring Boot框架下實(shí)現(xiàn)Excel服務(wù)端導(dǎo)入導(dǎo)出,需要的朋友可以參考下
    2023-06-06

最新評(píng)論