假设我有一个包含多个项目的String数组
String[] dog = {"doggy","doggo","BigDog","dawgg"};
如何从字符串数组中删除“ doggo”?
答案 0 :(得分:0)
数组是不可变的-数组的大小一旦制成就无法更改,也不能“添加”项。
但是,我编写了一种方法,可以为您删除数组中的项目:
public class RemoveArrayItem {
public static void main(String[] args) {
String[] array = {"foo", "bar", "bar"};
String[] newarray = removeArrayItem(array, "bar");
for(int i = 0; i < newarray.length; i++) {
System.out.print(array[i]+" ");
}
}
public static String[] removeArrayItem(String[] array, String item) {
boolean doescontain = false;
for(int i = 0; i < array.length; i++) {
if(array[i].equals(item)) {
doescontain=true;
}
}
if(doescontain) {
int newindex = 0;
String[] newarray = new String[array.length-1];
for(int i = 0; i < array.length; i++) {
if(!array[i].equals(item)) {
newarray[newindex]=array[i];
newindex++;
}
}
return newarray;
}else {
return array;
}
}
}
测试用例:(数组)
foo, bar
输出
foo
测试用例2
foo bar bar
输出
foo bar
(当我将方法的项目设置为“栏”时)
说明:
该方法接收两个参数,一个数组(字符串)和要删除的项目(字符串)。
首先,它将遍历数组以检查其是否包含所需的项目。如果没有,它将直接返回原始数组。
如果这样做,它将创建一个新数组并开始循环遍历原始数组。如果for循环中数组的当前项目不等于该项目,则它将变量分配给新数组( newarray )中的位置。如果这样做,那么它将什么都不做。
然后它将返回 newarray 。
答案 1 :(得分:0)
我相信,使用最新版本的Java(> = 8)的最简洁的方法是:
import java.util.Arrays;
String[] doggoless =
Arrays.stream(dog)
.filter(word -> !"doggo".equals(word))
.toArray(String[]::new);
答案 2 :(得分:0)
这是我自己的尝试。它可能比其他一些代码更快,因为如果不需要它,它不会创建新数组(流总是这样做)。但是它确实在最短的O(n)时间内运行。
它也是通用的,这使其比其他硬编码数组类型的代码更具灵活性。
/**
* Removes elements from an array.
*
* @param array The array to remove elements from.
* @param element The element to remove.
* @return An array with the specified elements removed.
* @throws NullPointerException if either array or element is null.
*/
public static <T> T[] remove( T[] array, T element ) {
int count = 0;
for( T t : array )
if( element.equals( t ) ) count++;
if( count == 0 ) return array;
T[] newArray = (T[])Array.newInstance( array.getClass().getComponentType(),
array.length-count );
for( int i = 0, j = 0; i < array.length; i++ ) {
if( !element.equals( array[i] ) )
newArray[j++] = array[i];
}
return newArray;
}
测试:
String[] test1 = { "foo", "bar", "foo", "bar" };
String[] result = remove( test1, "bar" );
System.out.println( Arrays.toString( result ) );
result = remove( test1, "x" );
System.out.println( Arrays.toString( result ) );
result = remove( test1, "foo" );
System.out.println( Arrays.toString( result ) );
result = remove( result, "bar" );
System.out.println( Arrays.toString( result ) );
result = remove( result, "bar" );
System.out.println( Arrays.toString( result ) );
输出:
run:
[foo, foo]
[foo, bar, foo, bar]
[bar, bar]
[]
[]
BUILD SUCCESSFUL (total time: 2 seconds)