"); //-->
本篇文章扣丁学堂Java培训小编主要是和大家分享Java编程实现中英混合字符串数组按首字母排序的方法,文章中会有代码列出,对Java感兴趣想要学习的小伙伴下面和小编一起来看一下吧。

在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序。例如:
String[] arrays = new String[] { "gyu", "sdf", "zf", "大同", "收到", "地方", "三等分", "的人", "反对高铁", "泛代数", "上的投入", "和国家" };
/*设置语言环境*/
Comparator<Object> com = Collator.getInstance(java.util.Locale.CHINA);
Arrays.sort(arrays, com);
for (String item:arrays) {
System.out.print(item+" ");
}
输出的结果为:“gyu sdf zf 大同 的人 地方 反对高铁 泛代数 和国家 三等分 上的投入 收到”;在Java中排列的顺序是按照数字->英文->汉字进行排序的,这种排序方式可以满足部分要求,但很多情况下我们并不希望这样排列!例如Anroid中的通讯录,音乐播放列表等等,这些情形下我们希望英文首字母和中文拼音首字母一样的排列在一起以方便查询。由于这类排序算法很复杂,例如首字母相同的字符串还要接着比较第二个、第三个...。但是如果我们将jdk自带的排序加以应用就不会显得那么复杂了;
我的想法是这样的:既然Java中排序是按数字->英文->汉字来进行排序的,那我们就把每个汉字打头的字符串前面加上一个该字符串第一个字符的拼音的首字母和一个区分符“&”,再使用jdk提供的排序函数进行排序,这时我们得到的就是我们想要的排序的数组了。然后再遍历数组,将包含&符号的字符串去掉&和第一个英文字母便完成了整个排序了,具体实现代码如下(获取汉字拼音需要引用该jar:pinyin4j-2.5.0.jar):
/**
* 将字符串数字按首字母先后进行排序
*
* Java原生排序为 数字->英文->中文
* 为了将英文和中文首字母相同的排列到一起
* 先将字符串首字符为汉字的改为该汉字的首字母加上该字符串
* 为了以示区分中间再加一个分割符&
* 然后使用Java原生排序算法
* 再将包含&字符的字符串中的&和首字母去除从而达到排序目的
* */
public static void main(String[] args) {
String[] arrays = new String[] { "gyu", "sdf", "zf", "大同", "收到", "地方", "三等分", "的人", "反对高铁", "泛代数", "上的投入", "和国家" };
for (int i = 0; i < arrays.length; i++) {
String str = arrays[i];
if (str.length() == 0)
return;
String alphabet = str.substring(0, 1);
/*判断首字符是否为中文,如果是中文便将首字符拼音的首字母和&符号加在字符串前面*/
if (alphabet.matches("[\\u4e00-\\u9fa5]+")) {
str = getAlphabet(str) + "&" + str;
arrays[i] = str;
}
}
/*设置排序语言环境*/
Comparator<Object> com = Collator.getInstance(java.util.Locale.CHINA);
Arrays.sort(arrays, com);
/*遍历数组,去除标识符&及首字母*/
for (int i=0;i<arrays.length;i++) {
String str=arrays[i];
if(str.contains("&")&&str.indexOf("&")==1){
arrays[i]=str.split("&")[1];
}
System.out.println(arrays[i]);
}
}
public static String getAlphabet(String str) {
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
// 输出拼音全部小写
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
// 不带声调
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
String pinyin = null;
try {
pinyin = (String) PinyinHelper.toHanyuPinyinStringArray(str.charAt(0), defaultFormat)[0];
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
return pinyin.substring(0, 1);
}
这时输出结果为:“大同 的人 地方 反对高铁 泛代数 gyu 和国家 三等分 上的投入 收到 sdf zf”,大家也可以自己尝试自己写排序算法去实现,锻炼一下思维也不无坏处。
以上就是扣丁学堂Java在线学习小编给大家分享的Java编程实现中英混合字符串数组按首字母排序的方法,希望对小伙伴们有帮助。想要了解更多内容的小伙伴可以登录扣丁学堂官网查看,或者是通过扣丁学堂微信等平台咨询。扣丁学堂是专业的Java培训机构,通过千锋扣丁学堂金牌讲师在线录制Java视频教程内容,让你快速掌握Java从入门到精通的实战技能,想要学好Java的话现在就行动吧。扣丁学堂java技术交流群:487098661。微信号:codingbb
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
马瑞利广州电子工厂成立30周年,持续巩固全球创新与智能制造枢纽地位
面向超精准应用的匹配电阻器网络
请教DX,CL761S为哪个厂家的, 有规格书吗
声控开关及放大器原理图
MCU电力线通信(PLC)解决方案
英伟达 2027 财年 Q1 财报:营收利润双创新高,AI 算力需求持续爆发
R8C、Lx学习型遥控器参考设计
BOE(京东方)OLED技术赋能联想YOGA Air 14 Ultra 定义超轻薄AI PC新标杆
简单的单按键开关电路
BOE(京东方)全球首发原生千帧FHD 护眼电竞显示器
P89LPC935 AD转换应用实例
开关电源反馈设计类型
P89LPC935 DA的使用方法
MCU电能计量解决方案
经济性分析对Chiplet技术的应用普及意义重大
CodeWarrior v6.0
人形机器人的“感官系统”怎么搭?TI 多传感器方案+其他芯片融合架构
美国拨款超20亿美元资助IBM等企业开展量子计算项目
P89LPC938 Flash单片机使用指南-3
小米加码自研芯片,未来五年砸两千亿打造玄戒系列产品
微电脑低频电疗仪的原理图
关于bootloader问题
P89LPC938 Flash单片机使用指南-3 (英)
另类开关电源电路欣赏
提供家电,音响,MP3方案设计
DELO推出新一代光激活粘合剂,助力LiDAR大规模量产
P89LPC938 Flash单片机ADC范例
家电.汽车音响.MP3方案设计
为机器人/灵巧手的3D感知与触觉赋能,艾迈斯欧司朗带来直接飞行时间(dToF)传感与光学压力传感技术
R8C触摸式遥控器解决方案