在安卓中从字符串数组中移除一个元素

10

我正在制作一个简单的安卓应用程序。我使用以下代码从数组中删除元素。

 arr_fav = {"1","2","3"};
 for(int i= 0;i<arr_fav.length;i++)
 {
     if(current_id == Integer.parseInt(arr_fav[i]))
     {
        arr_fav[1] = null;
     } }

我通过这种方式得到了类似arr_fav = {"1",null,"3"}的数组。但是我想要的是arr_fav = {"1","3"}。如何删除一个元素。我对Android开发很陌生,请帮助我解决问题。


1
你可以将它转换为ArrayList。 - Mikhaili
如果你需要更一般的信息,请访问https://dev59.com/8nVD5IYBdhLWcg3wAGiD#122207。 - Mikhaili
优化:将当前ID解析一次为字符串,并将其与arr_fav[i]相等。 - Mikhaili
14个回答

20

最好使用ArrayList。

arr_fav = {"1","2","3"};
List<String> numlist = new ArrayList<String>();
for(int i= 0;i<arr_fav.length;i++)
{
 if(current_id == Integer.parseInt(arr_fav[i]))
 {
   // No operation here 
 }
 else
 {
     numlist.add(arr_fav[i]);
 }
}
 arr_fav = numlist .toArray(new String[numlist .size()]);

使用ArrayList确实更好,但是你的使用方式并没有充分利用它的优势。在你上面的代码中,numlist可以是一个数组。 - The111
@The111,这里我使用ArrayList而不是调整数组大小,因为Java默认情况下不提供调整其数组大小的功能。请仔细检查。 - Ram kiran Pachigolla
1
是的,但你使用的ArrayList唯一功能是add()。如果你只是要将东西逐个添加到列表末尾,那么可以使用简单的数组。OP想要从列表中删除某些内容。遍历整个列表并将除了已删除项之外的所有内容放入新列表不是需要或利用ArrayList功能的解决方案。 - The111
@Madhumitha - 是的,它“可以工作”,但你真的应该阅读上面的评论。 - Brian Roach

10

不可以。

数组不支持调整大小。

您需要创建一个新的(较小的)数组,并将希望保留的元素复制到其中。

更好的做法是使用一个动态的List实现。比如ArrayList<Integer>


1
-1 表示“一个动态的List”。 List接口并不要求它是动态的,它甚至可以是不可变的。 - amit
谢谢您,Pedantic先生。我猜“某种动态的类型”不够清晰明了?没关系,我会为您编辑的。 - Brian Roach
至少要诚实。之前的回答版本就像我引用的那样,而不是“那将是...”如果您后来编辑了它,那就是另一回事了。长话短说 - 我的评论+踩票正好起到了应有的作用 - 让您将答案更改为更准确的内容。 - amit
3
亲爱的主啊,当你发表评论时,我的确正在编辑,而你所抱怨的修改是在我发布修订版大约30秒后进行的。就算你不想像巡林者里克一样,你也可以简单地说:“嘿,那不完全正确”。 - Brian Roach

5

Java中的数组不是动态的,您可以使用ArrayList代替。


请查看我的代码。如果您有更多的元素,应使用变量来交换这些元素。 - Nirav Tukadiya

2
你可以将需要的数组元素复制到一个新的数组中。
 j = 0;
 for(int i= 0;i<arr_fav.length;i++)
  {
   if(current_id != Integer.parseInt(arr_fav[i]))
 {
    arr_new[j++] = arr_fav[i];
 } }

2

这将完成工作...

List x = new ArrayList(Arrays.asList(arr_fav));
x.remove(String.valueOf(current_id));
arr_fav = x.toArray();

  1. arr_fav 是字符串数组,您要删除整数。
- Mikhaili
谢谢你的提示。已更新为使用String.valueOf。 - xagyg

2

使用 ArrayList 代替数组。它支持删除任何元素,动态大小等功能。

ArrayList<String> arr_fav_list = new ArrayList<String>();
arr_fav_list.addAll(arr_fav);
arr_fav_list.remove(1);

这并不是一个确切的答案。他正在检查数组中的current_id。 - Ram kiran Pachigolla
不,这不是一个确切的答案。这只是一个清晰说明如何使用ArrayListremove()方法的例子。 - The111

1

试试这样做

int[] intAry = new int[5]; 

// populate array with 0 to 4  

for (int i=0; i < intAry.length; i++) {  

  intAry[i] = i;  

}  

List<Integer> aList  = Arrays.asList(intAry); // change the array to a list of integers  

aList.remove(3); // remove the item 3 (4th index)  

aList.toArray(intAry); // convert list back to array  

System.out.println("size of array=" + intAry.size()); // output array size should be 4  

for (int i=0; i < intAry.length; i++) {  

  System.out.print(intAry[i] + " "); // should output "0 1 2 4 "  

}  

1

试试这个:

    ArrayList<String> rm = new ArrayList<String>();
    rm .addAll(arr_fav);
    rm .remove(1);

0

复制这个方法:

private static String[] deleteElement(String stringToDelete, String[] array) {
    String[] result = new String[array.length];
    int index = 0;

     ArrayList<String> rm = new ArrayList<String>();

    for(int i = 0; i < array.length; i++) {
        rm.add(array[i]);
    }
    for(int i = 0; i < array.length; i++) {
        if(array[i].equals(poistettava)) {
            index = i;
        }
    }
    rm.remove(index);

    result = rm.toArray(new String[rm.size()]);

    return result;
}

删除元素:

String[] array = {"1", "2", "3"};
array = deleteElement("3", array);

0
你可以使用以下方法来实现它。。
public static String[] removeElements(String[] input, String deleteMe) {
List result = new LinkedList();

for(String item : input)
    if(!deleteMe.equals(item))
        result.add(item);

return result.toArray(input);
}

或者你可以使用ArrayUtils

array = ArrayUtils.removeElement(array, element)

它是内部类 com.android.internal.util.ArrayUtils。 - Mikhaili
啊,好的,但我认为他是开发安卓应用的。 - Mikhaili

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接