android pinyin4j的基本用法

2024-06-09 02:18
文章标签 android 用法 基本 pinyin4j

本文主要是介绍android pinyin4j的基本用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 简单介绍

有时候,需要将汉字变成对应的拼音,以方便数据的处理。比如在Android手机应用的开发上,要查询联系人的姓名,通常都是用拼音进行查询的。比如要查询曹孟德,就可以输入cmd,即曹孟德三个汉字的拼音caomengde各字的首字母。但是怎样才能将曹孟德翻译成caomengde呢?很简单的办法就是建立一个大的对照表(比如用关联容器Map),比如<cao><” meng><” de>但这样的做法,需要维护好一个比较大的对照表,同时一个汉字可能有多个发音,也就是说Map这样的容器时不行的,因为其<key,value>必须是一一对应的。在C++中可以用STL里面的multimap来解决这个问题,但Java中没有类似multimap这样的东西,除非自己实现一个。

 

Pinyin4j就是为了解决类似这样的问题的。它是sourceforge.net上的一个开源项目,功能非常强大:

支持同一汉字有多个发音

还支持拼音的格式化输出,比如第几声之类的,

同时支持简体中文、繁体中文转换为拼音使用起来也非常简单。下面是其官方网址,其中提供了下载:

http://pinyin4j.sourceforge.net/

 

2. 基本用法:

通常情况下,只需要用到其中的PinyinHelper类中的静态方法toHanyuPinyinStringArray就可以了,比如:

String[] pinyinArray =PinyinHelper.toHanyuPinyinStringArray('');

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

{

System.out.println(pinyinArray[i]);

}

就会输出:

dan1

chan2

shan4

这三种发音,后面的数字代表第几声。可以看到静态方法toHanyuPinyinStringArray返回的数据类型是一个String数组,它用来接收一个汉字的多个发音,如果toHanyuPinyinStringArray中的参数不是汉字,那么它会返回null

 

3.格式支持

Pinyin4j支持拼音输出的格式化,比如,可以输出为huanghuang2huáng等等,下面的代码就似是输出huáng的示例:

HanyuPinyinOutputFormat format= new HanyuPinyinOutputFormat();

format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);

format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);

 

String[] pinyinArray = null;

try

{

pinyinArray = PinyinHelper.toHanyuPinyinStringArray('', format);

}

catch(BadHanyuPinyinOutputFormatCombination e)

{

e.printStackTrace();

}

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

{

System.out.println(pinyinArray[i]);

}

此外,还支持大小写转换、ü等等。详细情况,可以查看Pinyin4j自带的文档。

 

4.实际示例代码

如果我们要将一段文字中的汉字全部转换成不带音调的拼音输出,而这段文字中又可能包含阿拉伯数字、英文、标点符号等等。如果完全靠自己写代码进行转换,那是非常麻烦的,其中一个首先就要区别,这段文字中那些是汉字,那些是非汉字。有了Pinyin4j,这个问题就不再困难了,因为对于非汉字,Pinyin4j会自动输出null。参考下面的示例代码:

importnet.sourceforge.pinyin4j.*;

importnet.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;

importnet.sourceforge.pinyin4j.format.HanyuPinyinToneType;

importnet.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

 

public class Chinese2PY

{

public static void main(String[] args)

{

Hanyu hanyu = new Hanyu();

// 中英文混合的一段文字

String str = "荆溪白石出,Hello 天寒红叶稀。Android 山路元无雨,What's up? 空翠湿人衣。";

String strPinyin = hanyu.getStringPinYin(str);

System.out.println(strPinyin);

}

}

 

class Hanyu

{

private HanyuPinyinOutputFormat format = null;

private String[] pinyin;

 

public Hanyu()

{

format = new HanyuPinyinOutputFormat();

format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

 

pinyin = null;

}

 

//转换单个字符

public String getCharacterPinYin(char c)

{

try

{

pinyin = PinyinHelper.toHanyuPinyinStringArray(c, format);

}

catch(BadHanyuPinyinOutputFormatCombination e)

{

e.printStackTrace();

}

 

// 如果c不是汉字,toHanyuPinyinStringArray会返回null

if(pinyin == null) return null;

 

// 只取一个发音,如果是多音字,仅取第一个发音

return pinyin[0];

}

 

//转换一个字符串

public String getStringPinYin(String str)

{

StringBuilder sb = new StringBuilder();

String tempPinyin = null;

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

{

tempPinyin =getCharacterPinYin(str.charAt(i));

if(tempPinyin == null)

{

// 如果str.charAt(i)非汉字,则保持原样

sb.append(str.charAt(i));

}

else

{

sb.append(tempPinyin);

}

}

return sb.toString();

}

}

 

输出结果:

jingxibaishichuHellotianhanhongyexiAndroid shanluyuanwuyuWhat'sup? kongcuishirenyi

这篇关于android pinyin4j的基本用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1043976

相关文章

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

bytes.split的用法和注意事项

当然,我很乐意详细介绍 bytes.Split 的用法和注意事项。这个函数是 Go 标准库中 bytes 包的一个重要组成部分,用于分割字节切片。 基本用法 bytes.Split 的函数签名如下: func Split(s, sep []byte) [][]byte s 是要分割的字节切片sep 是用作分隔符的字节切片返回值是一个二维字节切片,包含分割后的结果 基本使用示例: pa

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

android应用中res目录说明

Android应用的res目录是一个特殊的项目,该项目里存放了Android应用所用的全部资源,包括图片、字符串、颜色、尺寸、样式等,类似于web开发中的public目录,js、css、image、style。。。。 Android按照约定,将不同的资源放在不同的文件夹中,这样可以方便的让AAPT(即Android Asset Packaging Tool , 在SDK的build-tools目

Android fill_parent、match_parent、wrap_content三者的作用及区别

这三个属性都是用来适应视图的水平或者垂直大小,以视图的内容或尺寸为基础的布局,比精确的指定视图的范围更加方便。 1、fill_parent 设置一个视图的布局为fill_parent将强制性的使视图扩展至它父元素的大小 2、match_parent 和fill_parent一样,从字面上的意思match_parent更贴切一些,于是从2.2开始,两个属性都可以使用,但2.3版本以后的建议使