如何从字符串数组中删除项目

时间:2020-09-24 21:14:08

标签: java android

假设我有一个包含多个项目的String数组

String[] dog = {"doggy","doggo","BigDog","dawgg"};

如何从字符串数组中删除“ doggo”?

3 个答案:

答案 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)