如何在Java中从数组中删除元素

时间:2019-12-15 22:23:57

标签: java arrays

大家好,我正在尝试从字符串数组中删除用户输入的名称,我是编程新手,但是我已经尝试过了,但是它不起作用。有人可以帮我还是告诉我我做错了什么?

    String [] myName = {"Testname","Charel","melissa","Kelly"};

   removeName(myName);

    public void removeName(String[] names )
    {
        Scanner sc =  new Scanner(System.in);
        String name = "";
         name = sc.nextLine();
        for (int i = 0; i < names.length; i++) {
           name = names[i-1];
        }
    }

我该怎么做?

6 个答案:

答案 0 :(得分:0)

您可能需要使用列表。您的列表将是String的列表,并使用remove()方法执行此操作。

数组的长度是固定的,因此无法更改。

有用链接: Removing items from a list

答案 1 :(得分:0)

首先,数组在初始化后不会更改大小,更改数组大小的唯一方法是将其替换为新数组!因此,为了避免出现重复输入或空白字段的情况,您需要制作一个短一个大小的新数组,并输入要保留的名称。

数组可能不适合您的目的,因此请考虑使用list或ArrayList。列表可以调整大小,因此删除元素会自动缩短列表。我建议您调查一下。

最后,您目前甚至没有将输入内容与字段进行比较。将name = names[i-1];替换为

if(name.equals(names[i]))
//TODO: Remove from list

有关String.equals()的更多详细信息,请参见here

还请记住,用户输入的名称可能根本不匹配,因此请为这种情况做好准备!

答案 2 :(得分:0)

要从Java中的数组中删除元素,您需要创建一个新数组并复制要保留的所有元素。那是因为Java数组是固定大小的。

例如,要删除特定索引处的元素,可以这样做:

public static String[] remove(String[] array, int index) {
    String[] result = new String[array.length - 1];
    System.arraycopy(array, 0, result, 0, index);
    System.arraycopy(array, index + 1, result, index, result.length - index);
    return result;
}

然后您将按照以下步骤从数组中删除melissa

String[] names = { "Testname", "Charel", "Melissa", "Kelly" };
names = remove(names, 2);
System.out.println(Arrays.toString(names));

输出

[Testname, Charel, Kelly]

当然,使用List做起来会容易得多:

List<String> names = new ArrayList<>(Arrays.asList("Testname", "Charel", "Melissa", "Kelly"));
names.remove(2);
System.out.println(names);

或者:

List<String> names = new ArrayList<>(Arrays.asList("Testname", "Charel", "Melissa", "Kelly"));
names.remove("Melissa");
System.out.println(names);

两者的输出与上面相同。

答案 3 :(得分:0)

您可以执行以下操作:

使用String[]

import java.util.Arrays;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        String[] names = { "Testname", "Charel", "melissa", "Kelly" };
        Scanner scanner = new Scanner(System.in);
        System.out.println("The given list is: " + Arrays.toString(names));
        System.out.print("Enter a name to remove: ");
        String nameToRemove = scanner.nextLine();
        String[] shortList = removeName(names, nameToRemove);
        if (shortList != null && names != null && shortList.length == names.length - 1) {
            System.out.println("The updated list is: " + Arrays.toString(shortList));
        } else {
            System.out.println("This name doesn't exist in the given list");
        }
    }

    public static String[] removeName(String[] names, String nameToRemove) {
        String[] tempList;
        boolean found = false;
        if (names != null && names.length > 0) {
            tempList = new String[names.length];
            for (int i = 0; i < names.length; i++) {
                if (nameToRemove != null && nameToRemove.equals(names[i])) {
                    found = true;
                } else {
                    tempList[i] = names[i];
                }
            }
            if (found) {
                String[] shortList = new String[names.length - 1];
                int j = 0;
                for (int i = 0; i < tempList.length; i++) {
                    if (tempList[i] != null) {
                        shortList[j++] = tempList[i];
                    }
                }
                return shortList;
            }
        }
        return names;
    }
}

示例运行:

The given list is: [Testname, Charel, melissa, Kelly]
Enter a name to remove: melissa
The updated list is: [Testname, Charel, Kelly]

使用ArrayList

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        List<String> names = new ArrayList<String>(Arrays.asList("Testname", "Charel", "melissa", "Kelly"));
        Scanner scanner = new Scanner(System.in);
        System.out.println("The given list is: " + names);
        System.out.print("Enter a name to remove: ");
        String nameToRemove = scanner.nextLine();
        removeName(names, nameToRemove);
    }

    public static void removeName(List<String> names, String nameToRemove) {
        if (names == null || names.isEmpty()) {
            System.out.println("Either the list is not initialized or it is empty");
            return;
        }
        if (names.remove(nameToRemove)) {
            System.out.println("The updated list is: " + names);
        } else {
            System.out.println("This name doesn't exist in the given list");
        }
    }
}

示例运行:

The given list is: [Testname, Charel, melissa, Kelly]
Enter a name to remove: melissa
The updated list is: [Testname, Charel, Kelly]

另一种好方法如https://stackoverflow.com/a/2777932/10819573

中所述

答案 4 :(得分:0)

jdk提供了一些使用Java api的简单方法,例如:

    String [] myName = {"Testname","Charel","melissa","Kelly"};
    List<String> container = new ArrayList(Arrays.asList(myName));
    container.remove("Charel");
    String[] result = new String[myName.length - 1];
    container.toArray(result);

或者,您也可以使用此方法将数组转换为列表,

    Collections.addAll(container, myName);

答案 5 :(得分:0)

String [] myName = {"Testname","Charel","melissa","Kelly"};

removeName(myName);

public void removeName(String[] names )
{
    Scanner sc =  new Scanner(System.in);
    String name = sc.nextLine();

    for (int i = 0; i < names.length; i++) {
        if(names[i]==name)
        {
            for(int j=i;j<names.length-1;j++)
            {
                names[j]=names[j+1];
            }
        }
    }
}