android 中英混合字符串数组按首字母进行排序
来源:互联网 发布:晋中网络教研平台注册 编辑:程序博客网 时间:2024/06/10 06:00
在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”,大家也可以自己尝试自己写排序算法去实现,锻炼一下思维也不无坏处,呵呵。
- android 中英混合字符串数组按首字母进行排序
- Android 获取字符串首字母,并对字符串列表进行排序。
- java中中文字符串按首字母排序
- java丶对数组值按首字母进行排序
- java/android 对列表进行首字母排序
- 中英文混合按照首字母排序
- Android 按中文首字母排序
- thinkphp将名字按首字母进行排序
- 用系统方法提取字符串首字母并进行排序
- 对字符串数组进行排序
- 【iOS】汉字数组,按首字母排序
- 07.将字符串按首字母排序
- 字符串首字母排序
- ios 字符串首字母排序
- 字符串首字母排序加密
- 对List中,中文按照首字母进行排序
- Android 汉字首字母排序
- 数组排序(按对象中某个属性进行排序)
- stdcall、cdecl 和pascal简介
- linux iscsi tgtd的安装学习及问题
- Ubuntu编译安装boost并在eclipse C/C++中使用
- windows进程能打开的最大句柄数目
- SVN与Git比较
- android 中英混合字符串数组按首字母进行排序
- Android开发_如何设置按钮背景透明与半透明_图片背景透明
- postgresql 加解密
- 2012-04-24 14:34 struts2监听器首先要实现com.opensymphony.xwork2.interceptor.PreResultListener类
- ognl.ExpressionSyntaxException: Malformed OGNL expression: nbsp;的解决
- Android设置文字粗体的方法
- IntelliJ IDEA的Singleton模版的修改
- windows8中的ListView控件的属性
- weblogic启动报错,登录失败。