JAVA排序数字字母混合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA排序数字字母混合相关的知识,希望对你有一定的参考价值。

在List中有这样的数据,100A ,98.5, 98.5A , 34 ,52 , 100 ,98, 98.5B
先比较数字后比较字母A和B 带字母的数字排在不带数字的前面
怎样排序
达到 100A,100,98.5A,98.5B,98.5,98,52,34 这样的效果

import java.util.ArrayList;
import java.util.List;

public class Sort 

/**
 * @param args
 */
public static void main(String[] args) 
// TODO Auto-generated method stub
String[] nums =  "100A", "98.5", "98.5A", "34", "52", "100", "98",
"98.5B" ;

// 冒泡排序法排序
for (int i = 0; i < nums.length - 1; i++) 
for (int j = 0; j < nums.length - i - 1; j++) 
double num1;// 前一个数字去字母后的数值
boolean char1 = false; // 前一个数字是否含有字母
int ascii1 = 0;// 前一个数字所含字母的ASCII码
// 获取每个数字的最后一位,判断是否为大写字母(判断其ASCII码是否在65到90之间)
if ((int) (nums[j].toCharArray()[nums[j].length() - 1]) >= 65
&& (int) (nums[j].toCharArray()[nums[j].length() - 1]) <= 90) 
num1 = Double.parseDouble(nums[j].substring(0,
nums[j].length() - 1));
char1 = true;
ascii1 = (int) (nums[j].toCharArray()[nums[j].length() - 1]);
 else 
num1 = Double.parseDouble(nums[j]);


double num2;// 后一个数字去字母后的数值
boolean char2 = false; // 后一个数字是否含有字母
int ascii2 = 0;// 后一个数字所含字母的ASCII码
// 获取每个数字的最后一位,判断是否为大写字母(判断其ASCII码是否在65到90之间)
if ((int) (nums[j + 1].toCharArray()[nums[j + 1].length() - 1]) >= 65
&& (int) (nums[j + 1].toCharArray()[nums[j + 1]
.length() - 1]) <= 90) 
num2 = Double.parseDouble(nums[j + 1].substring(0,
nums[j + 1].length() - 1));
char2 = true;
ascii2 = (int) (nums[j + 1].toCharArray()[nums[j + 1]
.length() - 1]);
 else 
num2 = Double.parseDouble(nums[j + 1]);


// 从大到小排序
if (num1 < num2) 
String temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
 else if (num1 == num2) // 数值相等则判断是否有字母以及字母的顺序
// 如果两个都有字母,则判断顺序
if (char1 && char2) 
// 按ASCII码从小到大排列(即从A到Z排列)
if (ascii1 > ascii2) 
String temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;

 else if (!char1 && char2) // 如果后面一个数字有字母
String temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;





for (int i = 0; i < nums.length; i++) 
System.out.println(nums[i]);


 

我为了赋值方便,用的是String数组,但是跟用list没有区别,方法还是一样的,只是获取长度的时候调的方法不同。数组用.length, list用的是.size()。

参考技术A     //判断是否为数字
    public static boolean isNumber(String str)
        try
            int number = Integer.parseInt(str);
        catch(Exception e)
            return false;
        
        return true;
    
    
    //如果字符串是数字,就返回本身,如果是混合的,就返回数字的值。
    public static double String2Double(String str)
        if(isNumber(str))
            return Double.parseDouble(str);
        else
            char[] charArr = str.toCharArray();
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < charArr.length; i++) 
                if(isNumber(new String(charArr[i] + "")))
                    sb.append(charArr[i]);
                else
                    if((charArr[i]+"").equalsIgnoreCase("."))
                        sb.append(charArr[i]);
                    
                    continue;
                
            
            
            return Double.parseDouble(sb.toString());
        
        
    
    
    public static void main(String[] args) 
        List<String> list = new ArrayList<String>();
        list.add("98.5");
        list.add("100A");
        list.add("100");
        list.add("98.5B");
        String[] temp = new String[list.size()];
        for (int i = 0; i < list.size(); i++) 
            temp[i] = list.get(i);
        
        Arrays.sort(temp);
        
        for (int i = 0; i < temp.length - 1; i++) 
            if(String2Double(temp[i]) == String2Double(temp[i + 1]))
                if(!isNumber(temp[i + 1]))
                    String t = temp[i];
                    temp[i] = temp[i + 1];
                    temp[i + 1] = t;
                
            
        
        
        /*String s1 = "BCA";
        String s2 = "ABC";
        String[] temp = new String[]s1,s2;
        Arrays.sort(temp);*/
        
        //System.out.println((int)c);
        //System.out.println(String2Double(temp[0]));
    

以上是关于JAVA排序数字字母混合的主要内容,如果未能解决你的问题,请参考以下文章

Java编程实现中英混合字符串数组按首字母排序的方法

Java编程实现中英混合字符串数组按首字母排序的方法

Java编程实现中英混合字符串数组按首字母排序的方法

用java实现字母与数字混合的唯一序号,且要递增

Java编程实现中英混合字符串数组按首字母排序的方法

2.04 对字母数字的混合排序