`
gaozzsoft
  • 浏览: 413842 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Pinyin4j的使用研究-开源JAVA中文字符和拼音之间的转换

 
阅读更多

Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。

代码实现如下:

1.带声调的方法

 

/** 

* 汉字转换位汉语拼音,英文字符不变  带声调的方法

* @param chines 汉字 

* @return 拼音 

*/

public static String converterToSpellWithTONE(String chines) {

String pinyinName = "";

char[] nameChar = chines.toCharArray();

HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();

defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);

defaultFormat.setToneType(HanyuPinyinToneType.WITH_TONE_NUMBER);

defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V);

for (int i = 0; i < nameChar.length; i++) {

if (nameChar[i] > 128) {

try {

if (PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat) != null

&& PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat).length > 0) {

pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0];

}

} catch (BadHanyuPinyinOutputFormatCombination e) {

e.printStackTrace();

}

} else {

pinyinName += nameChar[i];

}

}

return pinyinName;

}


2.不带声调的方法

 

/** 

* 汉字转换位汉语拼音,英文字符不变 

* @param chines 汉字 

* @return 拼音 

*/

public static String converterToSpell(String chines) {

String pinyinName = "";

char[] nameChar = chines.toCharArray();

HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();

defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);

defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V);

for (int i = 0; i < nameChar.length; i++) {

if (nameChar[i] > 128) {

try {

if (PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat) != null

&& PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat).length > 0) {

pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0];

}

} catch (BadHanyuPinyinOutputFormatCombination e) {

e.printStackTrace();

}

} else {

pinyinName += nameChar[i];

}

}

return pinyinName;

}


3.

 

/** 

* 汉字转换位汉语拼音首字母,英文字符不变 

* @param chines 汉字 

* @return 拼音 

*/

public static String converterToFirstSpell(String chines) {

String pinyinName = "";

char[] nameChar = chines.toCharArray();

HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();

defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);

defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V);

for (int i = 0; i < nameChar.length; i++) {

if (nameChar[i] > 128) {

try {

if (PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat) != null

&& PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat).length > 0) {

pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0].charAt(0);

}

} catch (BadHanyuPinyinOutputFormatCombination e) {

e.printStackTrace();

}

} else {

pinyinName += nameChar[i];

}

}

return pinyinName;

}


Part Two:详细实现类如下:

 

package test;


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;

import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**

 * 

 * pinyin4j使用

 * 

 * @author

 * 

 */

public class PinYinTest {

 public static HanyuPinyinToneType[] toneTypes = new HanyuPinyinToneType[] {

   HanyuPinyinToneType.WITH_TONE_NUMBER,

   HanyuPinyinToneType.WITHOUT_TONE,

   HanyuPinyinToneType.WITH_TONE_MARK };

 public static HanyuPinyinVCharType[] vCharTypes = new HanyuPinyinVCharType[] {

   HanyuPinyinVCharType.WITH_U_AND_COLON, HanyuPinyinVCharType.WITH_V,

   HanyuPinyinVCharType.WITH_U_UNICODE };

 public static HanyuPinyinCaseType[] caseTypes = new HanyuPinyinCaseType[] {

   HanyuPinyinCaseType.LOWERCASE, HanyuPinyinCaseType.UPPERCASE };

 /**

  * 将中文字符转换为相应的数组

  * 

  * @param chineseCharacter

  * @param toneSelection

  * @param vcharSelection

  * @param caseSelection

  */

 private static void updateFormattedText(String chineseCharacter,

   HanyuPinyinToneType toneSelection,

   HanyuPinyinVCharType vcharSelection,

   HanyuPinyinCaseType caseSelection) {

  // 拼音格式化对象

  HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();

  // 设置中文声调

  if (toneSelection != null) {

   if (toneTypes[0] == toneSelection) {

    outputFormat.setToneType(HanyuPinyinToneType.WITH_TONE_NUMBER);

   } else if (toneTypes[1] == toneSelection) {

    outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

   } else if (toneTypes[2] == toneSelection) {

    outputFormat.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);

   }

  }

  // 设置特殊拼音的转换

  if (vcharSelection != null) {

   if (vCharTypes[0] == vcharSelection) {

    outputFormat

      .setVCharType(HanyuPinyinVCharType.WITH_U_AND_COLON);

   } else if (vCharTypes[1] == vcharSelection) {

    outputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);

   } else if (vCharTypes[2] == vcharSelection) {

    outputFormat.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);

   }

  }

  // 设置转换的拼音的大小写

  if (caseSelection != null) {

   if (caseTypes[0] == caseSelection) {

    outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);

   } else if (caseTypes[1] == caseSelection) {

    outputFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);

   }

  }

  // 获取字符串

  char[] cnStr = chineseCharacter.toCharArray();

  String msg = "";

  for (char chineseChar : cnStr) {

   // 将字符转换为拼音数组

   String[] pinyinArray = null;

   String myenglish = "";

   try {

  myenglish = PinyinHelper.toHanyuPinyinStringArray(

      chineseChar, outputFormat)[0];

   } catch (BadHanyuPinyinOutputFormatCombination e1) {

    e1.printStackTrace();

   }

//   String outputString = concatPinyinStringArray(pinyinArray);

   System.out.println(myenglish);

   msg += myenglish;

  }

  System.out.println("msg is====" + msg);

 }

 

 private static void updateFormattedText2(String chineseCharacter,

  HanyuPinyinToneType toneSelection,

  HanyuPinyinVCharType vcharSelection,

  HanyuPinyinCaseType caseSelection) {

 // 拼音格式化对象

 HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();

 // 设置中文声调

 if (toneSelection != null) {

  if (toneTypes[0] == toneSelection) {

   outputFormat.setToneType(HanyuPinyinToneType.WITH_TONE_NUMBER);

  } else if (toneTypes[1] == toneSelection) {

   outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

  } else if (toneTypes[2] == toneSelection) {

   outputFormat.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);

  }

 }

 // 设置特殊拼音的转换

 if (vcharSelection != null) {

  if (vCharTypes[0] == vcharSelection) {

   outputFormat

     .setVCharType(HanyuPinyinVCharType.WITH_U_AND_COLON);

  } else if (vCharTypes[1] == vcharSelection) {

   outputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);

  } else if (vCharTypes[2] == vcharSelection) {

   outputFormat.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);

  }

 }

 // 设置转换的拼音的大小写

 if (caseSelection != null) {

  if (caseTypes[0] == caseSelection) {

   outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);

  } else if (caseTypes[1] == caseSelection) {

   outputFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);

  }

 }

 // 获取字符串

 char[] cnStr = chineseCharacter.toCharArray();

 for (char chineseChar : cnStr) {

  // 将字符转换为拼音数组

  String[] pinyinArray = null;

//   String test = "";

  try {

  pinyinArray = PinyinHelper.toHanyuPinyinStringArray(

     chineseChar, outputFormat);

  } catch (BadHanyuPinyinOutputFormatCombination e1) {

   e1.printStackTrace();

  }

  String outputString = concatPinyinStringArray(pinyinArray);

  System.out.println(outputString);

 }

}

 /**

  * 测试中文转换拼音方法

  * 

  * @param args

  */

 public static void main(String[] args) {

 updateFormattedText("我是中国人", HanyuPinyinToneType.WITH_TONE_NUMBER,

   HanyuPinyinVCharType.WITH_V,

   HanyuPinyinCaseType.LOWERCASE);

 System.out.println("===================");

 updateFormattedText("握事种果任", HanyuPinyinToneType.WITH_TONE_NUMBER,

   HanyuPinyinVCharType.WITH_U_AND_COLON,

   HanyuPinyinCaseType.LOWERCASE);

 System.out.println("========================");

 updateFormattedText("握事种果任", HanyuPinyinToneType.WITHOUT_TONE,

   HanyuPinyinVCharType.WITH_V,

   HanyuPinyinCaseType.LOWERCASE);

}

 /**

  * 将转换的拼音数组转换为字符串

  * 

  * @param pinyinArray

  * @return

  */

 private static String concatPinyinStringArray(String[] pinyinArray) {

  StringBuffer pinyinStrBuf = new StringBuffer();

  if ((null != pinyinArray) && (pinyinArray.length > 0)) {

   for (int i = 0; i < pinyinArray.length; i++) {

    pinyinStrBuf.append(pinyinArray[i]);

    pinyinStrBuf.append(System.getProperty("line.separator"));

   }

  }

  String outputString = pinyinStrBuf.toString();

  return outputString;

 }

}


下载链接:

分享到:
评论

相关推荐

    利用Java开源库把汉字转拼音

    pinyin4j是一个支持将中文转换到拼音的Java开源类库。 支持简体中文和繁体中文字符; 支持转换到汉语拼音,通用拼音, 威妥玛拼音(威玛拼法), 注音符号第二式, 耶鲁拼法和国语罗马字; 支持多音字,即可以获取一...

    java开源包10

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    java开源包8

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    java开源包6

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    java开源包9

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    java开源包4

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    java开源包101

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    JAVA上百实例源码以及开源项目

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    java开源包1

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    java开源包11

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    java开源包5

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    java开源包3

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    java开源包2

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    java开源包7

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    pinyin-plus:简繁体汉字转拼音的项目,解决多音字的问题。ElasticSearch,solr的拼音分词工具

    恰恰是实现路径,都离不开分词和拼音转换。pinyin pinyin-plus的特点是,索引分词的词库和拼音的词库是基于同一套词库,所以多音词的准确度特别高,而且词库的格式保留了开源词典的格式,词库可以轻松的定时更新。...

    Java资源包01

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    xmljava系统源码-JiemiMoShengRen:解密陌生人,陌生人交友app

    PinYin4j:处理中文和拼音之间的转换 Gson:处理json字符串解析,使用Model类对象化 CircularProgressButton:比较炫酷的button,稍加封装可以实现费时操作的传统progressbar效果 遇到的问题 PagerSlidingStrip和...

    lpinyin:Dart 汉字转拼音,Flutter, web, other

    ②拼音转换速度快 ③支持多种拼音输出格式:带音标、不带音标、数字表示音标以及拼音首字母输出格式 ④支持常见多音字的识别,其中包括词组、成语、地名等 ⑤简繁体中文转换 ⑥支持添加用户自定义字典 Pub ...

Global site tag (gtag.js) - Google Analytics