按字符串数组长度排序

问题描述 投票:0回答:2

我希望它按照特定字符串元素的长度递增顺序对字符串数组进行排序。

它没有给出所需的输出。

String[] a = sc.nextLine().trim().split(" ");
for (int i = 0;i< a.length-1;i++) {
    String min = a[i];
    for (int j = i + 1; j < a.length; j++) {
        if (a[j].length() < min.length()) min = a[j];
    }
    String t = a[i];
    a[i] = min;
    min = t;
}

我尝试使用

 System.out.println(Arrays.toString(a));

来观察数组元素

这是我得到的和我想要的:

输入时,

Hello Java Its me

观察到的输出

me me me me

预期输出

me Its Java Hello

即根据

a
的字符串元素的长度。


java arrays string sorting
2个回答
1
投票

您没有正确交换。您需要保存最小元素的索引并交换

a[i]
a[minIdx]

        String[] a = sc.nextLine().trim().split(" ");
        for (int i = 0;i< a.length-1;i++) {
            String min = a[i];
            int minIdx = i;
            for (int j = i + 1; j < a.length; j++) {
                if (a[j].length() < min.length()) {
                    min = a[j];
                    minIdx = j;
                }
            }
            String t = a[i];
            a[i] = min;
            a[minIdx] = t;
        }

-1
投票

您提供的代码没有按特定字符串元素的长度递增顺序对数组进行排序。相反,它交换数组中的元素,使最短的字符串位于数组的开头。 要按特定字符串元素的长度递增顺序对数组进行排序,可以使用 Arrays.sort() 方法并传递一个比较字符串长度的自定义比较器。这是一个例子:

String[] a = sc.nextLine().trim().split(" ");
Arrays.sort(a, new Comparator<String>() {
    public int compare(String s1, String s2) {
        return s1.length() - s2.length();
    }
});
System.out.println(Arrays.toString(a));

这将为您提供预期的输出:

me Its Java Hello
© www.soinside.com 2019 - 2024. All rights reserved.