`
gaozzsoft
  • 浏览: 426928 次
  • 性别: 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;

 }

}


下载链接:

分享到:
评论

相关推荐

    pinyin4j-2.5.0.jar 下载 java汉字转拼音 jar包 附带超级简单小dome

    总的来说,pinyin4j-2.5.0.jar是一个强大且易用的Java库,它极大地简化了汉字与拼音之间的转换过程,是处理中文字符问题时不可或缺的工具。通过合理利用这个库,开发者可以更高效地实现各种基于拼音的业务逻辑,提升...

    中文转拼音工具类,pinyin4j-2.5.0.jar 适用于地址人名

    pinyin4j是一个专门用于Java平台的开源库,它提供了方便的API,能够帮助开发者快速实现中文到拼音的转换。在处理地址和人名等特定场景下,pinyin4j-2.5.0.jar表现出了极高的实用价值。 pinyin4j-2.5.0.jar是pinyin4...

    pinyin4j-2.5.0.jar 中文转化拼音,获取首字母

    pinyin4j是一个开源的Java库,专为处理中文汉字到拼音的转换而设计。它支持多种拼音输出格式,包括全拼、简拼以及首字母,这使得它在各种应用场景中都能灵活运用。例如,在进行文本分析时,我们可以利用pinyin4j快速...

    pinyin4j-2.5.0

    总的来说,`pinyin4j-2.5.0`是Java开发者处理中文字符串拼音转换的理想选择。无论是简单的拼音获取,还是复杂的多音字处理,它都能提供强大而便捷的支持。通过理解和掌握这个库,可以极大地提升我们的开发效率,让...

    pinyin4j-2.5.0.jar下载

    pinyin4j是一款开源的Java库,由Barry De Zwart开发,其主要功能是将汉字转换为汉语拼音。这个库不仅能够提供基本的拼音转换,还能处理多音字、声调等问题,极大地简化了开发者的编码工作。版本2.5.0是该库的一个...

    汉字转拼音类(内含pinyin4j-2.5.0.jar)

    pinyin4j是一个开源的Java库,由Barry de Graaff 创建,主要用于处理汉字的拼音转换。它能够将汉字转换为汉语拼音,支持多音字,并且可以提供不同的拼音输出格式,如全拼、简拼以及声调标注。这个库广泛应用于Java和...

    将简体中文和繁体中文转换拼音的jar包 pinyin4j-2.5.0.jar

    《使用pinyin4j库进行中文到拼音转换的详解》 在处理中文字符时,有时我们需要将汉字转换为对应的拼音,以便进行各种文本处理任务,如搜索引擎优化、文本分析或语音合成。在这种情况下,Java开发者可以利用开源库...

    pinyin4j.zip pinyin4j.jar

    Pinyin4j便是一个专门解决这一问题的强大工具,它是一个开源的Java库,能够方便、高效地将汉字转换为汉语拼音,为开发者提供了极大的便利。 Pinyin4j的核心功能在于其对汉字拼音的处理能力。它能够处理单个汉字、...

    pinyin4j-2.5.0.jar

    在压缩包中,附带的`PinyinUtils.java`是一个使用示例,它展示了如何在实际项目中集成和使用pinyin4j。这个示例文件通常包含了初始化、转换和处理结果的基本步骤,对于初学者来说,是一个很好的学习起点。通过阅读和...

    pinyin4j jar包

    总结起来,pinyin4j是一个强大且实用的Java拼音处理工具,它涵盖了从基本的汉字转拼音到复杂的声调处理等多种功能,适用于各种需要汉字与拼音转换的场景。对于Java开发者来说,掌握并利用好pinyin4j,无疑能提升项目...

    pinyin4j-2.5.1.jar

    pinyin4j是一个专门用于Java平台的中文字符转拼音的开源库,它的版本为2.5.1,是开发者处理中文字符转换为拼音的重要工具。该库由net.sourceforge.pinyin4j包提供,包含了丰富的类和方法,能够帮助开发者方便地获取...

    pinyin4j拼音java

    需要注意的是,pinyin4j库不支持繁体字和非标准汉字的拼音转换,因此在处理这类字符时需要额外考虑。 在实际应用中,pinyin4j不仅可以用于拼音转换,还可以用于构建关键词索引、拼音排序、拼音模糊搜索等功能。例如...

    [pinyin4j]java版汉字转换拼音大小写

    通过以上介绍,我们可以看到`pinyin4j`库为Java开发者提供了一个非常方便的方式来处理中文字符与拼音之间的转换,尤其是在需要控制转换后拼音大小写的情况下。无论是用于搜索引擎优化、中文输入法还是语音识别系统,...

    pinyin4j-2.5.0.jar_pinyin_pinyin4j-2.5.0.jar_

    pinyin4j是一个Java语言编写的开源库,专用于处理中文汉字的拼音转换,它为开发者提供了便捷的API接口,使得在Java应用中进行汉字与拼音的相互转化变得轻而易举。标题中的“pinyin4j-2.5.0.jar”即为此库的特定版本...

    使用pinyin4j的Java库进行汉字转拼音

    pinyin4j是一个开源的Java库,它提供了汉字和拼音之间的转换功能,包括将汉字字符串转换为全拼、提取每个汉字的首字母,以及将字符串转换成ASCII码等。这个库是基于java平台实现的,用户可以通过导入相关的jar包来...

    使用pinyin4j将中文转换为拼音

    值得注意的是,pinyin4j不仅支持普通汉字的拼音转换,还能够处理一些特殊字符,如多音字和罕用字。此外,它还可以输出拼音的声母、韵母、声调等部分,为更复杂的应用场景提供了便利。 总的来说,pinyin4j是一个强大...

    pinyin4j所需jar包

    pinyin4j是一个Java库,专门用于处理汉字与拼音之间的转换,尤其适用于那些需要将中文数据转换为拼音进行进一步处理的场景,如搜索引擎优化、数据分析或者用户输入的合法性检查等。其最新版本为2.5.0,该版本的主jar...

    pinyin4j-2.5.0 一个汉语转拼音的工作,java代码

    pinyin4j是一个专门用于Java平台的开源库,它能够高效地将汉字转换为对应的汉语拼音,从而极大地简化了这一过程。本文将深入探讨pinyin4j-2.5.0版本的功能、使用方法以及其在实际项目中的应用。 一、pinyin4j概述 ...

Global site tag (gtag.js) - Google Analytics