一段排序代码

问题:集合中用四个字符串#DEF #ABC ABC ABC#,排序后得到ABC ABC# #ABC #DEF

分析:一个集合中使用了两种排序,ABC ABC#属于标准的字典顺序排序,而要把#开头的字符串放到非#开头的后面,相当于使用了降序排序。(#的unicode编码为35,远远小于字母的unicode编码)

解决:写比较器的时候对字符串进行分析,如果遇到#开头的字符串,将#加128后再进行排序比较。

代码:

public static void main(String[] args) {
		List<String> list = new ArrayList<>();
		list.add("#ABC");
		list.add("#DEF");
		list.add("ABC");
		list.add("ABC#");
		Collections.sort(list, new Comparator<String>() {

			@Override
			public int compare(String arg0, String arg1) {
				if(arg0.charAt(0)=='#' ^ arg1.charAt(0)=='#'){
					if(arg0.charAt(0)=='#') {
						arg0 = new StringBuilder(arg0).replace(0, 1, String.valueOf((char)('#'+128))).toString();
						System.out.println("arg0:"+arg0);
						return arg0.compareTo(arg1);
					} else {
						arg1 = new StringBuilder(arg1).replace(0, 1, String.valueOf((char)('#'+128))).toString();
						System.out.println("arg1:"+arg1);
						return arg0.compareTo(arg1);
					}
				}else{
					return arg0.compareTo(arg1);
				}
			}
		});
		
		System.out.println(list.toString());
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值