Java对含有字母,汉字,字符,数字的字符串依次按首字母进行排序

注:默认将汉字的优先级为5(汉字的话比较汉字拼音的首字母),字符的优先级为4(.字符除外),大写字母的优先级为3,小写字母的优先级为2,数字的优先级为1。

采用直接插入排序算法另外使用了一个外部的jar包jpinyin-1.1.8.jar下载地址。开头请打上import com.github.stuxuhai.jpinyin.*;

第一步,我们要能够对字符串进行比较大小,然后才能够使用排序算法(对于与两个字符串,前者大于后者返回true,否则返回false)。

public static Boolean compare(String one,String two){//进行比较两个字符串大小one大返回true否则返回false
		
		char[] ones=one.toCharArray();//将字符串转为字符数组
		char[] twos=two.toCharArray();
		int number;
		if(ones.length>twos.length)
			{
			number=twos.length;
			}else{
				number=ones.length;
			}
		for(int i=0;igrade_two)
			{
				return true;
			}
			else{
				if(grade_onetwo_num)
							{
								return false;
							}
							else{
								continue;
							}
						}
						
					}else{
						if(grade_one==4){//当等级都为4时表示都为字符,但是默认.字符大于别的字符
							if(ones[i]=='.')
							{
								return true;
							}
							else{
								if(twos[i]=='.')
							{
								return false;
							}else{
								continue;
							}
							}
						}else{//当等级为1,2,3是继续比较,且比较方法相同都是比较编码的大小
							if(one_numtwo_num)
								{
									return false;
								}
								else{
									continue;
								}
							}
						}
					}
					
				}
			}
		}
		return true;
	
	}
	public static int get_First_Pinyin(char c)//获取汉字字符的拼音的首字母
	{
		String[] pinyins=PinyinHelper.convertToPinyinArray(c, PinyinFormat.WITHOUT_TONE);
		char[] result=pinyins[0].toCharArray();
		//System.out.println(pinyins[0]);//输出整个拼音
		//System.out.println(result[0]);//输入拼音的首个字母
		int nums=result[0];
		return nums;
		
	}
	
	public static int getGrade(char c){//获取字符的优先级
		int i=c;
		if (i>=19968&&i<=40869)
			{return 5;}
		else{
			if(i>=48&&i<=57)
			{
				return 1;
			}else{
				if(i>=97&&i<=122)
				{
					return 2;
				}else{
					if(i>=65&&i<=90)
					{
						return 3;
					}
					else{
						return 4;
					}
				}
			}
		}
		
	
	}

 第二步,能够对字符串进行比较以后我们就可以愉快的使用我们的直接插入排序算法了。

public static String[] order(String[] old)//给一个没排序的数组,返回一个排序后的数组
	{
		
		String news[]=new String[old.length];
		
		news[0]=old[0];
		int n;
		for(int i=1;i

第三步,我们来看看结果吧

	public static void main(String[] args)
	{

	File f=new File("s:\\hi");
	String str[]=f.list();//此处我读取了我电脑上的一个目录

	String[] news=order(str);
	System.out.println("----=排序前-----");
	for(int i=0;i

这个是对于Window的排序排序前后的结果,如果是Linux结果会更加的显著,因为从Java中直接获取的Liunx的目录列表是真的乱。

 

Java对含有字母,汉字,字符,数字的字符串依次按首字母进行排序_第1张图片

你可能感兴趣的:(Java日常)