删除某些要求的数组元素,并将数组所有元素前移
判断数组元素是否为空,应该避免String类型为null,造成空指针的问题,可加入一个判断来避免String[index]为空的情况,也可用下面的"a".equals(strings[index])来避免空指针问题,且更加简便。
package com.javasm.array;
import java.util.Arrays;
/**
* @author: JAVASM
* @classNAME: ArrayDemo06
* @description:
* @date: 2021/3/29 20:54
* @version:0.1
* @since:1.8
*/
public class ArrayDemo06 {
public static void main(String[] args) {
//删除数组元素
String[] strings = {"a", "b", "c", "a", "c", "a", "hello"};//正确结果为"b", "c", "a", "c", "a", "hello" null
//[null,b,c,a]
//删除数组里面所有的a元素 换成null
//数组元素必须是连贯的 后面元素移动位置
//第一层for循环用于遍历数组
for (int index = 0, len = strings.length; index < len; index++) {
if ("a".equals(strings[index])) {
//如果当前的元素为要删除的元素,则后面元素依次移位
//第二层for循环用于当有要删除的元素时,将后面的的元素全部向前移动
for (int i = index; i < len - 1; i++) {
strings[i] = strings[i + 1];
}
//数组元素前移,前面的元素都被覆盖了,但是最后一个数组元素仅是移动了,移后数组元素的值依旧存在,因此需要置空
strings[len - 1] = null;
//当一个元素被删除后,后面的元素往前补充,则依旧需要从当前元素开始比较,但是循环外有index++,
// 所以需要先index--,才能保证不错过检验前移的元素是否是需要删除的元素
if ("a".equals(strings[index])) {
index--;
}
}
}
System.out.println(Arrays.toString(strings));
//[null, b, null, hello, c, null, null]
}
}
程序输出结果如下:
[b, c, c, hello, null, null, null]
Process finished with exit code 0