如何从我的Java代码中删除数组中的某些元素

时间:2017-11-02 05:13:46

标签: java arrays

我正在为我的课程编写以下编码提示: 您的任务是编写具有以下签名的方法:

public static String[] removeFromArray(String[] arr, String toRemove)

该方法应该返回一个与arr具有相同内容的字符串数组,除非没有 发生了toRemove字符串。例如,如果您的方法由以下代码调用

String[] test = {“this”, “is”, “the”, “example”, “of”, “the”, “call”};
String[] result = removeFromArray(test, “the”);
System.out.println(Arrays.toString(result));

它应该生成以下输出:

[this, is, example, of, call]

注意:您的方法将通过测试程序传递arr和toRemove的值 - 您不应该 从方法内的用户读取这些值。此外,您必须使用。编写此方法 上面要求签名以获得信用。您不需要编写调用它的代码 方法 - 只有方法本身。 提示:因为您在创建数组时必须指定数组的长度,所以您可能需要制作数字 两个循环通过输入数组:一个用来计算toRemove字符串的出现次数,所以
您可以使用适当的大小创建新数组,然后将所有其他字符串复制到新数组。

我的所有代码都在我的代码中工作,但是我必须打印出新数组的最后一部分不起作用,我知道我已经把它缩小了以便它能正确地打印出来,但是我无法得到那个部分工作。我知道我必须摆脱零,但我不知道如何。此外,我的代码必须适用于任何数组,而不仅仅是我的测试用例。一些帮助或建议真的很好。非常感谢你!!! :) 这是我的代码:

public static void main(String[] args) {
    String[] test = {"this", "is", "the", "example", "of", "the", "call"};
    String[] remove = removeFromArray(test, "the");
    System.out.println(Arrays.toString(remove));
}

public static String[] removeFromArray(String[] arr, String toRemove) {
    int count = 0;
    for (int i = 0; i < arr.length; i++) {
        if (arr[i].equals(toRemove)) {
            count++;
        }
    }

    String[] result = new String[arr.length - count];
    //for (int i = 0; i < arr.length; i++) {
    //  if(!arr[i].equals(toRemove)){
    //    result[].equals(arr[i]);
    //}

    //}
    return result;
}

4 个答案:

答案 0 :(得分:1)

你的方法看起来没问题,看起来像评论的代码你试图用错误的方法分配新的数组

您应该使用result[i] = arr[i] ;代替result[].equals(arr[i]);

最后做:

String[] result = new String[arr.length - count];
int k = 0;
for (int i = 0; i < arr.length; i++) {
    if(!toRemove.equals(arr[i])){
       result[k] =  arr[i];
       k++;
    }

}
return result;

答案 1 :(得分:0)

你的最后一部分应该是逐个为数组赋值。

int j = 0;
for (int i = 0; i < arr.length; i++) {
    if(!toRemove.equals(arr[i])){
        result[j++] = arr[i];
    }
}

答案 2 :(得分:0)

它要求您返回一个排除给定单词的新String数组。循环遍历数组并添加不等于给定单词的单词。

public static String[] removeFromArray(String[] arr, String toRemove){
    ArrayList<String> words = new ArrayList<>();
    for(String s : arr)
        if(!s.equals(toRemove))
            words.add(s);
    return words.toArray(new String[0]);
}

由于数组大小在创建后无法更改,因此请使用ArrayList存储单词,然后以数组形式返回。

答案 3 :(得分:0)

我知道你是编程本身的新手,所以给出的解决方案非常好。

但是,使用Java,您通常会使用这些库;在这种情况下,Collections库。如果你正在使用Java 8,那么你就是这样做的:

public static String[] removeFromArray(String[] arr, String toRemove) {
    // create a List and fill it with your items
    ArrayList<String> list = new ArrayList();
    Collections.addAll(list, arr);

    // remove the items that are equal to the one to be removed
    list.removeIf(s -> toRemove.equals(s));

    // transfer back to array
    return list.toArray(new String[list.size()]);
}

然后,有Java 8 Streams,这将使这个

public static String[] removeFromArray(String[] arr, String toRemove) {
    return Arrays.stream(arr)             // create stream from array
        .filter(s -> !toRemove.equals(s)) // filter out items
        .toArray(String[]::new);          // create array from stream
}