您好我正在尝试编写一个对字符串数组进行排序的函数,例如
{"1","112","99", a, e, g}
String arr[] = { "1", "112", "99", "e", "a", "g" };
// Arrays.sort(arr);
int numberArray[] = new int[3];
String stringArr[] = new String[3];
for (String value : arr) {
boolean isNumeric = value.chars().allMatch(x -> Character.isDigit(x));
if (isNumeric) {
for (int i = 0; i < numberArray.length; i++) {
numberArray[i] = Integer.parseInt(value);
}
} else {
for (int i = 0; i < stringArr.length; i++) {
stringArr[i] = value;
}
}
Arrays.sort(numberArray);
Arrays.sort(stringArr);
System.out.println(numberArray);
System.out.println(stringArr);
}
}
答案 0 :(得分:0)
首先,a, e
和g
是变量,不一定是字符串。你的意思可能是"a", "e"
和"g"
。
你的问题基本上是:
如何对
String[]
中的值进行排序,以便在按字母顺序排序的字母(或单词?)之前对数字进行数字排序和优先排序?
但你的问题似乎不完整。您如何对"15qwe"
或"asd34"
等字符串进行排序?由于这些可以用不同的方式解释,你没有告诉我们这些规则,我会忽略这些,并帮助你只有数字和只有字母的情况。
有一个名为Integer
的类,它有一个名为parseInt()
的静态方法。如果此方法的参数不包含任何整数,则会抛出异常,因此这是一种检查它是数字还是字母的简单方法。
例如:
String[] arr = {"5", "7", "a", "1", "g", "b"};
String[] numberArray = new String[3];
// keep this as a String[] for simpler concatenation of the arrays later
String[] stringArr = new String[3];
/*if you do not know that there will be exactly 3 of each,
just write arr.length isntead of 3*/
for(int i = 0; i < arr.length; i++) {
int numberIndex = 0;
int stringIndex = 0;
try {
Integer.parseInt(arr[i]);
numberArray[numberIndex] = arr[i];
numberIndex++;
} catch (Exception e) {
String s = arr[i];
stringArr[stringIndex] = s;
stringIndex++;
}
}
Arrays.sort(stringArr);
Arrays.sort(numberArray);
现在你所要做的就是将两个数组连接成一个。
// you can replace numberArray.length and stringArr.length with 3 if you want
for(int i = 0; i < numberArray.length; i++) {
arr[i] = numberArray[i];
}
for(int i = 0; i < stringArr.length; i++) {
arr[numberArray.length + i] = stringArr[i];
}
System.out.println(Arrays.toString(arr));
String[]
,它仍会按字母顺序排序,而不是数字排序。例如,如果您有"3", "1"
和"15"
,则会按以下顺序对其进行排序:{"1", "15", "3"}
。这可能不是你想要的,所以我的错误是String[]
而不是int[]
。
因此,您需要做的是对代码实施这些更改:
int[] numberArray = new int[3];
代替String[] numberArray = new String[3];
numberArray[numberIndex] = Integer.parseInt(arr[i]);
代替:Integer.parseInt(arr[i]); numberArray[numberIndex] = arr[i];
如果以后要连接数组,则需要再次将整数转换为字符串。这可以通过静态方法Integer.toString()
轻松完成。
所以你需要对代码进行这么小的改动:
arr[i] = Integer.toString(numberArray[i]);
代替arr[i] = numberArray[i];