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