题目描述
请对一组字符串进行排序,字符串由大小写字母和数字组成,需要满足一下比较规则
- 长度不同时,长度较短在排前面。
- 长度相同时,按照字典顺序排列(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;i<str.length;i++) {
for(int j=i+1;j<str.length;j++) {
if(longs(str[i],str[j])) {
String strs = str [i];
str [i] =str [j];
str [j]= strs;
}else {
continue;
}
}
}
for(int i=0;i<str.length;i++) {
System.out.println(str[i]);
}
}
public static boolean longs (String s1,String s2) { //比较字符串的长度,如果需要互换位置,返回true
if((s1.length())<(s2.length())) {
return false;
}else if(s1.length()>s2.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<s1.length();i++) {
if((s1.charAt(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)<s2.charAt(i)) { //其他情况
return true ;
}else if(s1.charAt(i)==s1.charAt(i)) {
continue;
}else {
return false;
}
}
return false;
}
}
解题思路
思路基本和冒泡排序相同,若前者的字符串长度大于后者,或前者的字典序大于后者则进行位置互换。首先利用longs函数来判断字符串的长度,若长度相同则利用compare函数进行判断,首先用equals判断是否相同,用charAt来读取单个字符进行比较,当s1,s2同为大写或小写,s1,s2有一个大写有一个小写时,情况比较复杂,用if函数判断。
此代码为小编自己一人所写,若发现代码有误,请私聊 勿喷!!!!