Java中String数组的排序

使用Java compareToIgnoreCase 方法排序

这个方法我在上一篇文章已经说过如何使用了,也说明了它的原理
我们可以看一看:点击查看icon-default.png?t=L9C2https://blog.janyork.com/index.php/archives/421/

为了更加详细的讲解这个方法在数组中的使用,我们来讲解一下这个示例

示例 

我们用一个String数组来储存4首歌曲的名字,然后从控制台输入一首歌,并且将它插入到数组里面,并且排序5首歌曲

直接看代码:

数组歌曲排序

import java.util.Scanner;
public class HgDome {
    public static void main(String[] args) {

        //变量跟数组关于初始值问题

        String[] musics = new String[]{"Island","Ocean","Pretty","Sun"};
        String[] newMusics = new String[musics.length+1];
        //新歌曲数组

        String music;
        //保存用户输入的歌曲名称

        int index = musics.length;
        //保存新歌插入位置

        //输出插入前的结果
        System.out.print("插入前的数组为:");
        for(int i = 0; i < musics.length ; i++){
            System.out.print(musics[i]+"  ");
        }
        //将数组musics中的元素复制到新歌曲数组newMusics中
        for(int i = 0; i < musics.length; i++){
            newMusics[i] = musics[i];
        }
        //输入歌曲名称
        Scanner input = new Scanner(System.in);
        System.out.print("\n请输入歌曲名称:");
        music = input.nextLine();

        //找到新元素的插入位置
        for(int i = 0; i < musics.length; i++){
            if(musics[i].compareToIgnoreCase(music) > 0){
                index = i;
                break;
            }
        }

        //元素后移
        for(int i = newMusics.length-1; i > index; i--){
            newMusics[i] = newMusics[i-1];    
            //index下标开始的元素后移一个位置
        }
        newMusics[index] = music;            
        //新元素放在index的位置
        
        //输出插入后的结果
        System.out.print("插入后的数组为:");
        for(int i = 0; i < newMusics.length; i++){
            System.out.print(newMusics[i]+"  ");
        }


    }

}

我们来看看效果 

 

 

 分析

先看看我们开始
我们定义了两个数组!

String[] musics = new String[]{"Island","Ocean","Pretty","Sun"};

这是第一个数组,它的作用是储存4个歌曲的名称,这是一个静态(不可改变)的数组值,无法扩充它的储存空间,所以我们需要再定义一个动态数组空间 定义一个动态数组:

String[] newMusics = new String[musics.length+1];

这个数组的长度是 [musics.length+1] ,数组名+length 是获取数组的长度,我们的第二个数组里面需要多一个空间来保存插入的数值,所以需要原来的musics这个数组的长度 +1

好了,我们已经将两个数组定义好了

定义变量

下一步,我们定义一个空值,来保存要插入的歌名

String music;

然后我们用定义一个int数值,来储存要插入歌曲插入的位置(下标)

int index = musics.length;

输出之前数组

我们输出一次没插入歌曲前的数组

System.out.print("插入前的数组为:");
for(int i = 0; i < musics.length ; i++){
    System.out.print(musics[i]+"  ");
}

我们的静态数组是不可扩充的,我们利用循环来将原来的数组 musics[] 搬运到 newMusics[] ,因为原来的数组只有4个String值,而我们新的数组有5个空间,将数组搬运到新数组后我们就空余一个空间,用于放插入空间

    //将数组musics中的元素复制到新歌曲数组newMusics中
            for(int i = 0; i < musics.length; i++){
                newMusics[i] = musics[i];
            }

输入要插入的歌名

现在,很多人觉得我们应该要将歌名插入数组了,可是,歌名从哪来?

这里就应该要用到Scanner了,让用户从控制台输入一个歌名

    //输入歌曲名称
    Scanner input = new Scanner(System.in);
    System.out.print("\n请输入歌曲名称:");
    music = input.nextLine();

找到插入位置

找到插入位置与数组中的插入字符原理一样,不懂可以看看这一篇文章:

跳转链接:Java中如何在数组中插入一个字符 - 小简博客 (janyork.com)icon-default.png?t=L9C2https://blog.janyork.com/index.php/archives/414/

我们先前定义了一个 index 来储存插入位置,我们用循环将位置(下标)找到并赋值给index

 //找到新元素的插入位置
    for(int i = 0; i < musics.length; i++){
        if(musics[i].compareToIgnoreCase(music) > 0){
            index = i;
            break;
        }
    }

利用这个方法比较String值,找出要插入位置下标

数组值后移

找到插入的位置后,此时,这个位置是存在可用数值的,我们在插入字符串前,需要将插入位置(index)后面的数后移

             //元素后移
            for(int i = newMusics.length-1; i > index; i--){
                newMusics[i] = newMusics[i-1];    
                //index下标开始的元素后移一个位置
            }

这里这个(int i = newMusics.length-1)是什么,可能许多人有疑问,这个就是 数组长短-1 ,也就是数组下标长度,我们从最后一个下标开始,index(插入位置)后面的数组值都往后移动一个空间,给要插入的歌曲腾出一个位置

好了,此时就可以说是万事俱备只欠东风了

插入字符串

现在,我们将空出的位置赋值

将music(要插入的音乐)赋值个数组中的index下标(数组空出位置)

newMusics[index] = music; 

重新输出数组

            System.out.print("插入后的数组为:");
            for(int i = 0; i < newMusics.length; i++){
                System.out.print(newMusics[i]+"  ");
            }

如果还是有不懂,可以自己结合代码,运行分析,或者联系我,还有其他字符串排序方法,我单独一篇文章总结

Guess you like

Origin blog.csdn.net/qq_60750453/article/details/120732269