题目描述:字符串排序。请编写程序按照如下规则对多个字符串(每个字待串至少含有一个数字字符)进行降序排列;
1.按照字符串中字母字符个数和数字字符个数(简称字母数字比)的比值大小进行排序;
2.若两个字符串的字母数字比相同,则按照字符串本身大小进行排序。
备注本题中不考虑中文字符。
例如:输入值:["abc123", "abc+1234","ababab--1"]
返回值:["ababab--1", "abc123", "abc+1234"]
解答:写的有点复杂了
public static String[] sort1(String[] arr) {
double[] ratio = new double[arr.length];
for (int i = 0; i < arr.length; i++) {
int num = 0;
int letter = 0;
for (int j = 0; j < arr[i].length(); j++) {
if (arr[i].charAt(j) >= 48 && arr[i].charAt(j) <= 57) {
num++;
} else if ((arr[i].charAt(j) >= 97 && arr[i].charAt(j) <= 122) || (arr[i].charAt(j) >= 65 && arr[i].charAt(j) <= 90)) {
letter++;
}
}
ratio[i] = (double) letter / num;
}
int[] index = new int[ratio.length];
for (int i = 0; i < index.length; i++) {
double max = -1;
for (int j = 0; j < ratio.length; j++) {
if (max < ratio[j]) {
index[i] = j;
max = ratio[j];
}
if (max == ratio[j] && j != index[i]) {
if (arr[j].length() > arr[index[i]].length()) {
index[i] = j;
}
}
}
ratio[index[i]] = -2;
}
String[] arr2 = new String[arr.length];
for (int i = 0; i < index.length; i++) {
arr2[i] = arr[index[i]];
}
return arr2;
}