编写一个使用Java对字符串数组进行排序的函数

时间:2016-01-14 21:20:39

标签: java arrays string sorting methods

  

您好我正在尝试编写一个对字符串数组进行排序的函数,例如

     

{"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);

    }
}

1 个答案:

答案 0 :(得分:0)

首先,a, eg是变量,不一定是字符串。你的意思可能是"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));

发现错误:

由于numberArray是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];