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

本文介绍了一种基于冒泡排序改进的字符串排序算法,该算法能够处理包含大小写字母和数字的字符串,通过比较字符串长度和字典顺序实现排序,特别考虑了大写与小写的比较规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

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

  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;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函数判断。

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值