Pinyin4j的基本用法,以及给城市名称选择排序,侧边栏字母排序,内有Pinyin4j的下载链接,这是对我发表的上一篇文章进行修改以及更新bug,上一篇文章排序有点bug,现在将bug修改好了
1.需要下载Pinyin4j的jar包。下载地址为https://sourceforge.net/projects/pinyin4j/files/
下载后需要放到安卓项目目录下的libs文件夹。如下图片所示
然后还需要依赖这个jar包。不会导包的Android Studio导入jar包或aar包看这个链接。https://blog.csdn.net/qq_36570506/article/details/128019219
基本用法:
通常情况下,只需要用到其中的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。
2.上面的第一步,只是为了给城市名称转换成拼音输出,好为了城市名称按首字母排序,有了第一步的拼音,只需要将拼音的字符串截取第一位字母即可排序。排序见MainActivity类对象里面
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.example.myapplication001.R.id;
import com.bumptech.glide.Glide;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;import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;public class MainActivity extends AppCompatActivity implements LetterSideBar.OnTouchLetterListener {private ImageView view;private TextView tv;private ListView listView;private LetterSideBar letterSideBar;private TextView textView;/*** 没有排序,旧的数据*/private List<CityBean> mCities = new ArrayList();/*** 排序后的,新的数据*/private List<CityBean> all_mCities = new ArrayList();private CityAdapter mAdapter;//----------------------------------------------------------------------------------------------//26个字母private List<CityBean> list_a = new ArrayList();private List<CityBean> list_b = new ArrayList();private List<CityBean> list_c = new ArrayList();private List<CityBean> list_d = new ArrayList();private List<CityBean> list_e = new ArrayList();private List<CityBean> list_f = new ArrayList();private List<CityBean> list_g = new ArrayList();private List<CityBean> list_h = new ArrayList();private List<CityBean> list_i = new ArrayList();private List<CityBean> list_j = new ArrayList();private List<CityBean> list_k = new ArrayList();private List<CityBean> list_l = new ArrayList();private List<CityBean> list_m = new ArrayList();private List<CityBean> list_n = new ArrayList();private List<CityBean> list_o = new ArrayList();private List<CityBean> list_p = new ArrayList();private List<CityBean> list_q = new ArrayList();private List<CityBean> list_r = new ArrayList();private List<CityBean> list_s = new ArrayList();private List<CityBean> list_t = new ArrayList();private List<CityBean> list_u = new ArrayList();private List<CityBean> list_v = new ArrayList();private List<CityBean> list_w = new ArrayList();private List<CityBean> list_x = new ArrayList();private List<CityBean> list_y = new ArrayList();private List<CityBean> list_z = new ArrayList();//----------------------------------------------------------------------------------------------@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = (TextView) findViewById(R.id.name);listView = (ListView) findViewById(R.id.id_lv_citysa);letterSideBar = (LetterSideBar) findViewById(R.id.id_ls_sidebara);textView = (TextView) findViewById(R.id.id_tv_maska);// CityListActivity.startCityActivityForResult(MainActivity.this);// for (int i=0;i<6;i++){// CityBean cityBean13=new CityBean();
// cityBean13.setId(0);
// cityBean13.setName("v他素");
// // cityBean13.setPinyin("haikou");
// cityBean13.setPinyin("v");
// this.mCities.add(cityBean13);
// }for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("青岛");// cityBean0.setPinyin("qingdao");// cityBean0.setPinyin("q");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean=new CityBean();cityBean.setId(i);cityBean.setName("佛山");// cityBean.setPinyin("foshan");// cityBean.setPinyin("f");this.mCities.add(cityBean);}// for (int i=0;i<6;i++){// CityBean cityBean0=new CityBean();
// cityBean0.setId(0);
// cityBean0.setName("U型管");
// // cityBean0.setPinyin("uxingguan");
// cityBean0.setPinyin("u");
// this.mCities.add(cityBean0);
// }// for (int i=0;i<6;i++){// CityBean cityBean0=new CityBean();
// cityBean0.setId(0);
// cityBean0.setName("id");
// // cityBean0.setPinyin("id");
// cityBean0.setPinyin("i");
// this.mCities.add(cityBean0);
// }for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("北京");// cityBean0.setPinyin("beijing");// cityBean0.setPinyin("b");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("日本");// cityBean0.setPinyin("riben");// cityBean0.setPinyin("r");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("草本植物");// cityBean0.setPinyin("caobenzhiwu");// cityBean0.setPinyin("c");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("台湾");// cityBean0.setPinyin("taiwan");// cityBean0.setPinyin("t");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("峨眉山");// cityBean0.setPinyin("emeishan");// cityBean0.setPinyin("e");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("江门");// cityBean0.setPinyin("jiangmen");// cityBean0.setPinyin("j");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("昆明");// cityBean0.setPinyin("kunming");// cityBean0.setPinyin("k");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("兰州");// cityBean0.setPinyin("lanzhou");// cityBean0.setPinyin("l");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("茂名");// cityBean0.setPinyin("maoming");// cityBean0.setPinyin("m");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("南京");// cityBean0.setPinyin("nanjing");// cityBean0.setPinyin("n");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("欧洲");// cityBean0.setPinyin("ouzhou");// cityBean0.setPinyin("o");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("判断");// cityBean0.setPinyin("panyu");// cityBean0.setPinyin("p");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean1=new CityBean();cityBean1.setId(0);cityBean1.setName("暗凯");// cityBean1.setPinyin("ankai");// cityBean1.setPinyin("a");this.mCities.add(cityBean1);}for (int i=0;i<6;i++){CityBean cityBean12=new CityBean();cityBean12.setId(0);cityBean12.setName("德州");// cityBean12.setPinyin("dezhou");// cityBean12.setPinyin("d");this.mCities.add(cityBean12);}for (int i=0;i<6;i++){CityBean cityBean13=new CityBean();cityBean13.setId(0);cityBean13.setName("海口");// cityBean13.setPinyin("haikou");// cityBean13.setPinyin("h");this.mCities.add(cityBean13);}for (int i=0;i<6;i++){CityBean cityBean14=new CityBean();cityBean14.setId(0);cityBean14.setName("烟台");// cityBean14.setPinyin("yantai");// cityBean14.setPinyin("y");this.mCities.add(cityBean14);}for (int i=0;i<6;i++){CityBean cityBean15=new CityBean();cityBean15.setId(0);cityBean15.setName("张家口");// cityBean15.setPinyin("zhangjiakou");// cityBean15.setPinyin("z");this.mCities.add(cityBean15);}for (int i=0;i<6;i++){CityBean cityBean16=new CityBean();cityBean16.setId(0);cityBean16.setName("瞎子");// cityBean16.setPinyin("xiamen");// cityBean16.setPinyin("x");this.mCities.add(cityBean16);}for (int i=0;i<6;i++){CityBean cityBean17=new CityBean();cityBean17.setId(0);cityBean17.setName("文山");// cityBean17.setPinyin("wenshan");// cityBean17.setPinyin("w");this.mCities.add(cityBean17);}for (int i=0;i<6;i++){CityBean cityBean18=new CityBean();cityBean18.setId(0);cityBean18.setName("三亚");// cityBean18.setPinyin("sanya");// cityBean18.setPinyin("s");this.mCities.add(cityBean18);}for (int i=0;i<6;i++){CityBean cityBean=new CityBean();cityBean.setId(i);cityBean.setName("广州");// cityBean.setPinyin("guangzhou");// cityBean.setPinyin("g");this.mCities.add(cityBean);}//------------------------------------------------------------------------------------------//在这里给城市名称设置拼音Log.v("拼音输出2", "打印 all_mCities.size()="+mCities.size());for(int i = 0; i < mCities.size(); ++i){ /*** 得到多个拼音数组,多音字*/String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(mCities.get(i).getName().charAt(0));//只要城市名称的第一个字// Log.v("拼音输出2", "打印数组大小 "+pinyinArray.length);Log.v("拼音输出2", "只要打印拼音1 "+pinyinArray[0].charAt(0));//这里只要多音字数组中的第一个,并且只要拼音字符串里的第一个字母//给城市名称列表设置拼音,只要拼音字符串里的第一个字母mCities.get(i).setPinyin(pinyinArray[0].charAt(0)+"");}//------------------------------------------------------------------------------------------//----------------------------------------------------------------------------------------//在这里排序 总共有这么多数据for(int i=0;i<mCities.size();i++){switch (mCities.get(i).getPinyin()){case "a" :list_a.add(mCities.get(i));break;case "b" :list_b.add(mCities.get(i));break;case "c" :list_c.add(mCities.get(i));break;case "d" :list_d.add(mCities.get(i));break;case "e" :list_e.add(mCities.get(i));break;case "f" :list_f.add(mCities.get(i));break;case "g" :list_g.add(mCities.get(i));break;case "h" :list_h.add(mCities.get(i));break;case "i" :list_i.add(mCities.get(i));break;case "j" :list_j.add(mCities.get(i));break;case "k" :list_k.add(mCities.get(i));break;case "l" :list_l.add(mCities.get(i));break;case "m" :list_m.add(mCities.get(i));break;case "n" :list_n.add(mCities.get(i));break;case "o" :list_o.add(mCities.get(i));break;case "p" :list_p.add(mCities.get(i));break;case "q" :list_q.add(mCities.get(i));break;case "r" :list_r.add(mCities.get(i));break;case "s" :list_s.add(mCities.get(i));break;case "t" :list_t.add(mCities.get(i));break;case "u" :list_u.add(mCities.get(i));break;case "v" :list_v.add(mCities.get(i));break;case "w" :list_w.add(mCities.get(i));break;case "x" :list_x.add(mCities.get(i));break;case "y" :list_y.add(mCities.get(i));break;case "z" :list_z.add(mCities.get(i));break;}}all_mCities.addAll(list_a);all_mCities.addAll(list_b);all_mCities.addAll(list_c);all_mCities.addAll(list_d);all_mCities.addAll(list_e);all_mCities.addAll(list_f);all_mCities.addAll(list_g);all_mCities.addAll(list_h);all_mCities.addAll(list_i);all_mCities.addAll(list_j);all_mCities.addAll(list_k);all_mCities.addAll(list_l);all_mCities.addAll(list_m);all_mCities.addAll(list_n);all_mCities.addAll(list_o);all_mCities.addAll(list_p);all_mCities.addAll(list_q);all_mCities.addAll(list_r);all_mCities.addAll(list_s);all_mCities.addAll(list_t);all_mCities.addAll(list_u);all_mCities.addAll(list_v);all_mCities.addAll(list_w);all_mCities.addAll(list_x);all_mCities.addAll(list_y);all_mCities.addAll(list_z);//---------------------------------------------------------------------------------------this.mAdapter = new CityAdapter(this, this.all_mCities);this.listView.setAdapter(this.mAdapter);this.letterSideBar.setOverLayTextView(this.textView);this.letterSideBar.setOnTouchLetterListener(this);//城市列表点击事件监听this.listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {public void onItemClick(AdapterView<?> parent, View view, int position, long id) {CityBean bean = (CityBean)mAdapter.getItem(position);tv.setText(bean.getName());}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if(requestCode == 101&& resultCode ==102){String city = data.getStringExtra("city");tv.setText(city);}}/*** 这个方法是用来与listview城市列表通信的,侧边栏的字母与城市列表字母一一对应* @param letter*/public void onLetterSelected(String letter) {int position = this.mAdapter.getPosition(letter);if (position != -1) {Log.v("LOG我在这里啊", "走到这里 position != -1 "+position);this.listView.setSelection(position);}}
}
Pinyin4j的基本用法,以及给城市名称选择排序,侧边栏字母排序,内有Pinyin4j的下载链接,这是对我发表的上一篇文章进行修改以及更新bug,上一篇文章排序有点bug,现在将bug修改好了相关推荐
- 【实践】汽车之家推荐系统排序算法迭代之路.pdf(附下载链接)
今天给大家分享汽车之家李晨旭先生所做的分享<汽车之家推荐系统排序算法迭代之路.pdf>. 本PPT已收录到小程序省时查报告中,大家可以到省时查报告小程序中查看并下载文档全文. 更多细节和相 ...
- 用批处理整理百度MP3上歌曲排行榜MP3及LRC文件的批量下载链接地址(含图文教程)
http://bbs.wuyou.com/viewthread.php?tid=192322 本文结构如下: 一.缘起:问题的提出 二.试探:徒劳而返 三.峰回路转:芝麻!开门! 四.万事俱备:xml ...
- Java黑皮书课后题第4章:*4.24(对三个城市排序)编写一个程序,提示用户输入三个城市名称,然后以升序进行显示
*4.24(对三个城市排序)编写一个程序,提示用户输入三个城市名称,然后以升序进行显示 题目 题目概述 运行示例 破题 代码 题目 题目概述 *4.24(对三个城市排序)编写一个程序,提示用户输入三个 ...
- 城市名称按首字母分组排序,并实现多音字处理
一.需求 将城市列表(中文)按照首字母分组排序,以26个字母的顺序进行分组. 传统的解决方式使用如下pinyin4j来解决: <dependency><groupId>com. ...
- Python爬虫学习第三章-4.3-使用xpath解析爬取全国城市名称
Python爬虫学习第三章-4.3-使用xpath解析爬取全国城市名称 这一节主要是使用xpath解析爬取全国城市名称 这里使用的网址是:空气质量历史数据查询 这一个案例体现的点主要是xpat ...
- 从编程角度来看此次乐言利用bug上分事件
这些天玩英雄联盟的人都知道峡谷之巅出了一件大事,LOL自远古大神发呆之后还没出现过如此严重.影响如此恶劣的bug.此次bug的出现由职业选手乐言首先发现, 但他并没有选择像发呆哥那样向官方提交bug, ...
- 微信翻译出Bug上热搜,程序员又背锅?
作者| 伍杏玲 来源 | 程序人生(ID:coder_life) 60s测试:你是否适合转型人工智能? https://edu.csdn.net/topic/ai30?utm_source=cxrs_ ...
- Android上传文件到服务器500,使用WebUploader解决安卓微信浏览器上传图片中遇到的bug...
摘自个人博客:走啊走的记录,欢迎点击查看,效果更佳! 微信浏览器上传图片bug的原因 微信在新版本中采用的是自己的X5内核浏览器,而在较老的版本中还有可能是安卓的原生浏览器.具体的环境我也不太了解,但 ...
- 使用GPS坐标查询国家以及城市名称,reverse_geocoder包用法
这两天在做数据集分析,其中有一项是对数据来源国家出现的频率进行统计.找到一个很好用的包,可以使用GPS坐标查询国家以及城市名称,mark一下. import reverse_geocoder if _ ...
最新文章
- “AI下乡”:华为和袁隆平一起种海水稻,欲改造1亿亩良田
- 「情报局41」人工智能的下一个目标是什么?了解业务用例
- 这个椅子哪里卖?我也想买啊!
- Linux 适用硬件平台/系统架构(i386 / i586 / i686 / x86 / x86_64)名词理解和区别
- Java并发编程的基础-线程的生命周期
- 使用Spring-hadoop小结
- Linux 编程和系统管理新手入门
- 40vf什么意思_变频器的VF模式是什么意思?VF什么意思
- linux有两种工作界面,Linux 向用户提供了两种界面:用户界面和系统调用。
- java跳出循环break;return;continue使用
- CM3中数据传输对齐/非对齐方式
- Nginx学习笔记(三) Nginx基本数据结构
- 职业经理人-授权后才是管理的开始
- AMD新旗舰:短小精悍,干掉双芯卡
- My97时间控件限制
- 【坦白说】如何确定对方身份?
- 硬盘安装Win7全攻略(图解)
- Accessorize to a Crime: Real and Stealthy Attacks on State-of-the-Art Face Recognition
- HTML小说排行榜案例
- 82.【LibraryManger】