1. 程式人生 > >java字母和資料混合排序

java字母和資料混合排序

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]);

        }

    }

}