Java 字符串排序--------请对一组字符串进行排序,字符串由大小写字母和数字组成,需要满足一下比较规则

题目描述

         请对一组字符串进行排序,字符串由大小写字母和数字组成,需要满足一下比较规则

  1. 长度不同时,长度较短在排前面。
  2. 长度相同时,按照字典顺序排列(AaBb-Zz,0-9顺序),即大写字母在小写字母前,数字排在字母后。

例:

abc Abc 123 1 1bc CBD abcd a

排序后结果为:

a 1 Abc abc CBD 1bc 123 abcd

代码如下

public class test{
	public static void main(String[] args) {
		String str [] = {"abc","Abc","123","1","1cb","CBD","abcd","a"};// 需要排序的字符串
		for(int i=0;is2.length()) {
			return true;
		}else {
			if(compare(s1,s2)) {    //若字符串长度相同则利用fun函数进行判断
				return true ;
			}
		}
		return false;
	}
	
	public static boolean compare(String s1,String s2) {
		if(s1.equals(s2)) {    //判断俩个字符串是否相同
			return false ;
		}
		for(int i=0;i='A'&&s1.charAt(i)<='Z')&&(s2.charAt(i)>='a'&&s2.charAt(i)<='z')) {//s1 大写 s2小写
				if(s1.charAt(i)>s2.charAt(i)-32) {
					return true ;
				}else if(s1.charAt(i)==s2.charAt(i)-32) {
					return true ;
				}else {
					return false ;
				}
			}
			if((s1.charAt(i)>='a'&&s1.charAt(i)<='z')&&(s2.charAt(i)>='A'&&s2.charAt(i)<='Z')) {//s1小写  s2大写
				if(s1.charAt(i)-32>s2.charAt(i)) {
					return true ;
				}else if(s1.charAt(i)-32==s2.charAt(i)) {
					return true ;
				}else {
					return false ;
				}
				}
			if((s1.charAt(i)>='A'&&s1.charAt(i)<='Z')&&(s2.charAt(i)>='A'&&s2.charAt(i)<='Z')) { //同大写
				if(s1.charAt(i)>s2.charAt(i)) {
					return true ;
				}else if(s1.charAt(i)==s2.charAt(i)) {
					continue;
				}else {
					return false;
				}
			}
			if((s1.charAt(i)>='a'&&s1.charAt(i)<='z')&&(s2.charAt(i)>='a'&&s2.charAt(i)<='z')) { //同小写
				if(s1.charAt(i)>s2.charAt(i)) {
					return true ;
				}else if(s1.charAt(i)==s2.charAt(i)) {
					continue;
				}else {
					return false;
				}
			}
			if(s1.charAt(i)

解题思路

 思路基本和冒泡排序相同,若前者的字符串长度大于后者,或前者的字典序大于后者则进行位置互换。首先利用longs函数来判断字符串的长度,若长度相同则利用compare函数进行判断,首先用equals判断是否相同,用charAt来读取单个字符进行比较,当s1,s2同为大写或小写,s1,s2有一个大写有一个小写时,情况比较复杂,用if函数判断。

此代码为小编自己一人所写,若发现代码有误,请私聊     勿喷!!!!

 

你可能感兴趣的:(算法题)