使用Java compareToIgnoreCase 方法排序
这个方法我在上一篇文章已经说过如何使用了,也说明了它的原理
我们可以看一看:点击查看https://blog.janyork/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]pareToIgnoreCase(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)https://blog.janyork/index.php/archives/414/
我们先前定义了一个 index 来储存插入位置,我们用循环将位置(下标)找到并赋值给index
//找到新元素的插入位置
for(int i = 0; i < musics.length; i++){
if(musics[i]pareToIgnoreCase(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]+" ");
}
如果还是有不懂,可以自己结合代码,运行分析,或者联系我,还有其他字符串排序方法,我单独一篇文章总结
更多推荐
Java中String数组的排序
发布评论