Pinyin4j介绍和简单使用

news2024/12/28 20:49:22

前言

Pinyin4j是一个Java库,用于将汉字转换为拼音。它是由中国清华大学的Tsinghua University和中国科学院计算技术研究所的研究人员开发的。Pinyin4j可以用于Java应用程序中,以便在需要时将汉字转换为拼音。例如,它可以用于中文输入法、文本编辑器、搜索引擎等。
这是它的具体网站,感兴趣的,可以自己去看一下
https://pinyin4j.sourceforge.net/

具体安装过程

  1. 在Maven官网去查询

  2. 引入相关依赖

<!-- https://mvnrepository.com/artifact/com.belerweb/pinyin4j -->
<dependency>
    <groupId>com.belerweb</groupId>
    <artifactId>pinyin4j</artifactId>
    <version>2.5.1</version>
</dependency>

简单一些用法

其实Pinyin4j的简单用法,实际它的核心类就是PinyinHelper类,我接下来会展示一个简单的api使用方法.

public class PinyinTest01 {
    public static void main(String[] args) {
        //1.展示单个汉字的字母拼写
        String[] res1=PinyinHelper.toHanyuPinyinStringArray('长');
        System.out.println(Arrays.toString(res1));
        String[] s = PinyinHelper.toHanyuPinyinStringArray('中');
        System.out.println(Arrays.toString(s));
    }
}

大家可以看见,我们上面的api方法,是可以获取到单个字符的拼写的.但为什么我们不直接获取一个字符串的拼写呢?
我去查了这个Pinyin4官网的api.发现了这样的一个事实
在这里插入图片描述
发现该方法已经被删除了,所以针对我们接下来做的文件搜索项目,我们要封装一下这个工具类,让它能够输入具体的字符串进行拼音转换.具体的思路如下:
我们首先要知道,我们要进行拼音转换首先要分为两种情况:1.全拼.2.首字符拼音
具体的步骤如下:
1.首先遍历字符串
2.遍历字符串之后,把每个字符串单独转译
3.转换之后的字符串保存到stringBuffer中,返回即可

具体代码如下:

    public static String get(String src,boolean fullSpell){
        //1.如果是空字符串,则不处理.
        if (src == null && src.trim().length() ==0){
            return null;
        }
        //针对Pinyin4j 做出配置,就是针对lu的lv的配置 ->使用v来配置,
        HanyuPinyinOutputFormat format=new HanyuPinyinOutputFormat();
        format.setVCharType(HanyuPinyinVCharType.WITH_V);
        //2.如果字符串非空
        //遍历字符串的每个字符串,针对每个字符串进行转换,把转换得到的结果,拼接到StringBuilder里面
        StringBuffer stringBuffer=new StringBuffer();
        for (int i=0;i<src.length();i++){
            char ch=src.charAt(i);
            String[] tmp=null;
            try {
                tmp= PinyinHelper.toHanyuPinyinStringArray(ch,format);
            } catch (BadHanyuPinyinOutputFormatCombination e) {
                e.printStackTrace();
            }
            if (tmp == null || tmp.length ==0){
                //如果是空的字符,就说明转换失败了.
                //如果输入的字符,没有汉语拼音,自然就会转换失败.
                //保留原始字符,加入结果中
                stringBuffer.append(ch);
            }else if(fullSpell){
                //拼音结果为true,我们
                stringBuffer.append(tmp[0]);
            }else {
                //拼音结果为false
                //比如 卡 =["ka","qia"] 此时取0号元素,得到了"ka",再取0号字符
                stringBuffer.append(tmp[0].charAt(0));
            }
        }
        return stringBuffer.toString();
    }

    public static void main(String[] args) {
        System.out.println(get("长",true));
        System.out.println(get("彘二",true));
        System.out.println(get("彘二",false));
        System.out.println(get("⻓还",true));
        System.out.println(get("绿鲤⻥",true));
        System.out.println(get("abc",true));
        System.out.println(get("中华⼈⺠共和国",false));
        System.out.println(get("⻓还",false));
        System.out.println(get("abc",false));
//        System.out.println(get("中华⼈⺠共和国",true));
        System.out.println(get("中华人民共和国",true));
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/995131.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型tokenizer流式响应解决词句连贯性问题

大模型tokenizer词句连贯性问题 现象 from transformers import LlamaTokenizerFast import numpy as nptokenizer LlamaTokenizerFast.from_pretrained("heilerich/llama-tokenizer-fast") origin_prompt "Hi, Im Minwoo Park from seoul, korea." id…

使用 multiprocessing 多进程处理批量数据

示例代码 import multiprocessingdef process_data(data):# 这里是处理单个数据的过程return data * 2# 待处理的数据 data [1, 2, 3, 4, 5]def normal_func():# 普通处理方式result []for obj in data:result.append(process_data(obj)return resultdef parallel_func():# …

JavaScript编程语法作业

目录 目录 前言 思维导图 1&#xff0c;作业资源 2&#xff0c;if语句练习 2.1代码解读: 2.2,结果展示: 3&#xff0c;switch语句练习 3.1,代码解读: 3.2,结果展示: 4.while循环练习 4.1,代码解读: 4.2.结果展示: 5.do-while循环练习 5.1,代码解读: 5.2,结果展…

STM32 CAN/CANFD软件快速配置(HAL库版本)

STM32 CAN/CANFD软件快速配置&#xff08;HAL库版本&#xff09; 目录 STM32 CAN/CANFD软件快速配置&#xff08;HAL库版本&#xff09;前言1 软件编程1.1 建立工程1.2 初始化1.2.1 引脚设置1.2.2 CAN基本参数设置1.2.3 CAN收发初始化设置1.2.4 中断设置 1.3 CAN发送1.4 CAN接收…

自定义Dynamics 365实施和发布业务解决方案 3. 开箱即用自定义

在本章中,您将开始开发SBMA会员应用程序。在开发的最初阶段,主要关注开箱即用的定制。在第2章中,我们讨论了如何创建基本解决方案的细节,在本章中,将创建作为解决方案补丁的基本自定义,并展示将解决方案添加到源代码管理和目标环境的步骤。 表单自定义 若要开始表单自定…

连续 3 年 40% 增长 续费率近 110%:纷享销客增长的底层逻辑

经营管理没有一招鲜&#xff0c;持续增长的底层逻辑&#xff0c;就是持续稳定的建设&#xff0c;不被外界所干扰。 笔记整理 | 张保文 SaaS 增长&#xff0c;比拼的是战略、组织、人才、市场、销售、客户成功等全价值链的基本功。连续 3 年 40% 增长&#xff0c;续费率近 110%…

【图解RabbitMQ-5】RabbitMQ Web管控台图文介绍

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;CSDN实力新星&#xff0c;后端开发两年经验&#xff0c;曾担任甲方技术代表&#xff0c;业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开…

C++ 结构体

前文 C中的结构体是一种非常有用的数据类型&#xff0c;它允许我们将不同的变量组合在一起&#xff0c;形成一个自定义的数据结构。 结构体在C中的应用非常广泛&#xff0c;它可以用来表示和管理各种实体、对象或数据的属性。比如&#xff0c;在一个学生管理系统中&#xff0c…

2.2 Java中的变量

1. 变量与赋值 在程序运行期间&#xff0c;随时可能产生一些临时数据&#xff0c;应用程序会将这些数据保存在内存单元中&#xff0c;每个内存单元都用一个标识符标识&#xff0c;这些用于标识内存单元的标识符就称为变量&#xff0c;内存单元中存储的数据就是变量的值。 下面…

C++day1---9.6

思维导图&#xff1a; 1.使用cout完成输出斐波那契前20项的内容 #include <iostream>using namespace std;int main() {int a 1;int b 0;int sum 1;int arr[20] {0};for(int i0; i<20; i){arr[i] sum; //存放最新值sum ab; //更新sumb a; …

windows mysql弹出黑框处理

现象 处理方式 点击禁用即可 以后就不会再出现了

【Arduino30】DS1302时钟芯片模拟值实验

硬件准备 DS1302芯片&#xff1a;1片 32.768kHz晶振&#xff1a;1个 面包板&#xff1a;1个 杜邦线&#xff1a;若干 硬件连线 软件程序 #include <DS1302.h> //头文件//定义引脚 const int rst_pin 5; const int date_pin 6; const int sclk_pin 7;//将DS1302实…

ARTS 2023.8.21-2023.8.27 (第一周)

ARTS 2023.8.21-2023.8.27 &#xff08;第一周&#xff09; &#x1f4a1;ARTS&#xff1a; A&#xff1a;至少每周完成一道Leecode的算法题&#xff1b; R&#xff1a;阅读并点评至少一篇英文技术文章&#xff1b; T&#xff1a;学习至少一个技术技巧&#xff1b; S&#xff…

Tina Ti 计算电路中的参数

如图所示 计算每个节点的参数 通过这个工具&#xff0c;就算你不知道电路的原理&#xff0c;电路网络分析&#xff0c;你都可以计算出理论值是多少。

PTA作业笔记——简单的输入输出

PTA前十题 7-2 输入输出整数7-3 输入输出单精度实数7-4 输入输出双精度实数7-5 输入输出字符7-6 整数的各种形式输出7-7 混合无间隔输入输出7-8 日期格式化7-9 区位码输入法 写在前面&#xff1a;不是很难的题目直接放上代码&#xff0c;只作为记录 初学C语言的时候涉及到的输入…

c++day3---9.8

1> 自行封装一个栈的类&#xff0c;包含私有成员属性&#xff1a;栈的数组、记录栈顶的变量 成员函数完成&#xff1a;构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小 头文件&#xff1a; #ifndef Z_H #define Z_H #inclu…

NV12数据格式转H265编码格式实现过程

一、需求 在视频处理和传输应用中&#xff0c;将视频数据编码为高效的格式是非常重要的。H.265&#xff08;也称为HEVC&#xff09;是一种先进的视频编码标准&#xff0c;具有更好的压缩性能和图像质量&#xff0c;相比于传统的编码标准&#xff08;如H.264&#xff09;&#…

ARTS 2023.8.28-2023.9.03 (第二周)

ARTS 2023.8.28-2023.9.03 &#xff08;第二周&#xff09; &#x1f4a1;ARTS&#xff1a; A&#xff1a;至少每周完成一道Leecode的算法题&#xff1b; R&#xff1a;阅读并点评至少一篇英文技术文章&#xff1b; T&#xff1a;学习至少一个技术技巧&#xff1b; S&#xff…

【计算机基础知识4】网络通信协议:TCP、UDP、WebSockets

目录 一、TCP&#xff08;传输控制协议&#xff09; 1. TCP的特点 2. TCP的连接建立和终止 3. TCP的可靠性机制 4. TCP的流量控制 二、UDP&#xff08;用户数据报协议&#xff09; 1. UDP的特点 2. UDP的使用场景 三、WebSockets 1. WebSockets协议的特点 2. WebSock…

二分搜索树深度优先遍历(Java 实例代码)

目录 二分搜索树深度优先遍历 Java 实例代码 src/runoob/binary/Traverse.java 文件代码&#xff1a; 二分搜索树深度优先遍历 二分搜索树遍历分为两大类&#xff0c;深度优先遍历和层序遍历。 深度优先遍历分为三种&#xff1a;先序遍历&#xff08;preorder tree walk&am…