文档章节

针对于 pinyin4j 的扩展类,Java 汉字转换成拼音

w
 walala_Lee
发布于 2013/05/27 11:34
字数 321
阅读 186
收藏 2

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

项目需要使用这个,就在网上搜了下如何使用,顺便把一些方法整合到一个类中,分享下

package com.sk.utils;

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

public class Pinyin {

	public static void main(String[] args) {
		System.out.println(new Pinyin().trans2Full("哈哈哈,这是一个好的good idea 吧?1000块钱值了吧?"));
	}
	
	private HanyuPinyinOutputFormat format = null;
	private String[] pinyin;

	public Pinyin() {
		format = new HanyuPinyinOutputFormat();
		format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		pinyin = null;
	}

	/**
	 * 转换单个字符
	 * @param c 
	 * @return
	 */
	public String trans2Char(char c){
		try{
			pinyin = PinyinHelper.toHanyuPinyinStringArray(c, format);
		}catch (BadHanyuPinyinOutputFormatCombination e){
			e.printStackTrace();
		}
		// 如果c不是汉字,toHanyuPinyinStringArray会返回null
		// 只取一个发音,如果是多音字,仅取第一个发音
		return (pinyin == null) ? null : pinyin[0];
	}
	
	/**
	 * 转换成全拼+首字母
	 * @param str
	 * @return
	 */
	public String trans2Full(String str){
		StringBuffer sb = new StringBuffer(trans2QuanPin(str));
		return sb.append(trans2HeadChar(str)).toString();
	}

	/**
	 * 转换一段字符串为全拼
	 * @param str
	 * @return
	 */
	public String trans2QuanPin(String str){
		StringBuffer sb = new StringBuffer();
		String tempPinyin = null;
		for (int i = 0; i < str.length(); i++){
			tempPinyin = trans2Char(str.charAt(i));
			if (tempPinyin == null){ // 如果str.charAt(i)非汉字,则保持原样
				sb.append(str.charAt(i));
			}else{
				sb.append(tempPinyin);
			}
		}
		return sb.toString();
	}

	/**
	 * 转换成 汉字首字母
	 * @param str
	 * @return
	 */
	public String trans2HeadChar(String str){
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < str.length(); i++) {
			String tempPinyin[] = PinyinHelper.toHanyuPinyinStringArray(str.charAt(i));
			if (tempPinyin == null){ // 如果str.charAt(i)非汉字,则保持原样
				sb.append(str.charAt(i));
			}else{// 提取汉字的首字母
				sb.append(tempPinyin[0].charAt(0));
			}
		}
		return sb.toString();
	}
}

© 著作权归作者所有

w
粉丝 3
博文 184
码字总数 51435
作品 0
深圳
私信 提问
加载中

评论(0)

汉字转拼音,TinyPinyin、Pinyin4j与JPinyin哪个库更快

1. 介绍 本文对TinyPinyin、Pinyin4j与JPinyin三个汉字转拼音库的用法、测试代码及转换的结果做一个简单的总结。 TinyPinyin 适用于Java和Android的快速、低内存占用的汉字转拼音库。 在And...

锐洋智能
2019/10/17
0
0
Pinyin4j 的基本用法

1. 简单介绍 有时候,需要将汉字编程对应的拼音,以方便数据的处理。比如在Android手机应用 的开发上,要查询联系人的姓名,通常都是用拼音进行查询的。比如要查询“曹孟德”,就可以输入“c...

鉴客
2011/09/11
9.5K
8
java 对 汉字排序(按照拼音字母排序)

业务场景: 一个list集合,里面add了若干个实体类,针对该实体类排序的属性为String。 使用技术,自定义list排序(JDK自带),重写Comparator接口的compare方法,汉字转拼音技术:使用的pin...

osc_shqlq255
2018/04/11
2
0
汉字转拼音工具JPinyin的介绍和使用示例

汉字转拼音的开源工具类包,已经出现过好几个,比如:Pinyin4J、Jpinyin等。本文主要结合JPinyin汉字转拼音的Java开源类库,给出相关的介绍和使用示例。 Jpinyin介绍 JPinyin是一个汉字转拼音...

王孟君
2016/11/13
1.7K
5
Java通过pinyin4j实现汉字转拼音

碰到个需求,需要按用户名字的首字母来排序。这就需要获取汉字对应的拼音了,突然就想起了pinyin4j这个jar包,于是就开始写了个汉字转拼音的工具类。在此记录一下,方便后续查阅 一、Pom依赖...

osc_a0rvnejm
2018/05/09
7
0

没有更多内容

加载失败,请刷新页面

加载更多

数据结构和算法 | 第一部分第五课:算法复杂度实践

>作者 谢恩铭,公众号「程序员联盟」。 转载请注明出处。 原文:https://www.jianshu.com/p/060ef52580af >《数据结构和算法》全系列 内容简介 前言 寻找最大和最小的元素 寻找不重复的元素 ...

程序员联盟_
21分钟前
8
0
tomcat项目改造->jerryrat

先做一点笔记防止自己忘了,还有很多小细节要慢慢调试, 有些其实也不是漏洞,但是等保测试有些特殊的情况,只能去做兼容性的处理 1:编译tomcat8 https://tomcat.apache.org/download-80.cgi...

国产大熊猫
22分钟前
25
0
aop:aspect与aop:advisor的区别

https://www.jianshu.com/p/40f79da0cdef

osc_6jhxf9ab
22分钟前
28
0
Python破解24点游戏,从此打扑克就没输过

文源网络,仅供学习之用,如有侵权请联系删除。 24点游戏 对于任意给定的四张扑克牌,计算是否有赢得24点游戏的方法(即使用加、减、乘、除四则运算凑成24的方法);如果有的话,列出所有可能...

Python圈子
22分钟前
12
0
阿里短信回执.net sdk的bug导致生产服务cpu 100%排查

一:背景 1. 讲故事 去年阿里聚石塔上的所有isv短信通道全部对接阿里通信,我们就做了对接改造,使用阿里提供的.net sdk。 网址:https://help.aliyun.com/document_detail/114480.html 同事...

osc_slnrw1du
23分钟前
41
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部