java语言将一个字符串集合按GBK编码(简体中文按拼音顺序)排序

/*

思路:由于java字符串排序默认为按Unicode编码排序,若想简体汉字按拼音排序,就要按GBK编码排序;首先建立方法比较两个字符串,将字符串用GBK编码转成byte数组,然后比较两个数组对应下标的大小关系,得出两个字符串的大小关系,然后按照这个比较大小的规则对整个集合进行排序。

*/

import java.io.UnsupportedEncodingException;
import java.util.List;
public class Tool {
 /**
  * 将字符串集合按GBK编码(简体字按拼音顺序)排序
  * 常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等
  * java默认Unicode,系统默认GBK
  */
 public static int compare(String str1,String str2){
  try {
   byte[] b1 = str1.getBytes("GBK");
   byte[] b2 = str2.getBytes("GBK");
   int l1=b1.length;
   int l2=b2.length;
   int l=Math.min(l1, l2);
   int k=0;
   while(k<l){
    byte bt1=b1[k];
    byte bt2=b2[k];
    if(bt1!=bt2)
     return bt1-bt2;
    k++;
   }
   return l1-l2;
  } catch (UnsupportedEncodingException e) {
   e.printStackTrace();
  }
  return 0;
 }
 public static void sort(List<String> list){
  int size=list.size();
  if(size<=1)
   return;
  for(int i=1;i<size;i++){
   for(int j=i;j>0;j--){
    if(compare(list.get(j), list.get(j-1))<0){
     String temp=list.get(j);
     list.set(j, list.get(j-1));
     list.set(j-1, temp);
    }else{
     break;
    }
   }
  }
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值