String aus einem Array entfernen

JavaKev

Mitglied
Hallo, ich habe folgende Aufgabe bekommen: Erstellen Sie eine Methode 'filterArray', die ein Array zurückliefert mit allen Einträgen des gegebenen String[]-Parameters ohne das eine Element, welches dem zweiten String-Parameter entspricht. Der Rückgaberwert ist ein Array mit nur den verbleibenden Elementen (in gleicher Reihenfolge). Sie können davon ausgehen, dass das zu entfernende String-Element genau einmal im Array vorkommt.

Nun habe ich folgenden Code geschrieben:
Java:
public String[] filterArray(String[] nameList, String nameToRemove){
    for (int i = 0; i < nameList.length; i++) {
            if (nameToRemove.contains(nameList[i])) {
                nameList[i] = "";
            }
    }
    return nameList;
    
}

Ich habe hier allerdings das Problem das ich bei z.B.
{ "Asterix", "Obelix", "Caesar", "Idefix" }, "Caesar"))); ----> [Asterix, Obelix, , Idefix]

er entfernt mir also nicht die Kommas mit, wodurch das Ergebnis nicht korrekt ist. Ich habe allerdings auch keine Idee wie man sonst ein String aus dem Array löschen kann. Kann mir vielleicht jemand einen Tipp geben?
 
Du enfernst ja auch nicht das zu entfernende Array-Element. Du setzt es im Eingabearray nur auf den Leerstring. Das Array-Element an sich ist dann immer noch da, der Wert davon ist dann nur der Leerstring. Du musst ein neues Array erzeugen und das dann zurückgeben, statt das zu entfernende Element im Eingabearray durch den Leerstring zu ersetzen.
 
Es würde zum Beispiel so funktionieren:

Java:
    public static String[] filterArray(String[] arr, String input) {
        return Arrays.stream(arr).filter(x -> !x.equals(input)).toArray(String[]::new);
    }
 
Du enfernst ja auch nicht das zu entfernende Array-Element. Du setzt es im Eingabearray nur auf den Leerstring. Das Array-Element an sich ist dann immer noch da, der Wert davon ist dann nur der Leerstring. Du musst ein neues Array erzeugen und das dann zurückgeben, statt das zu entfernende Element im Eingabearray durch den Leerstring zu ersetzen.
wenn ich ein neues String Array erzeugen möchte, mache ich dies doch nach folgender Struktur: String[] neuString = new String[]; aber was muss den in die Klammern bei dem new String? oder bin ich gerade komplett auf dem Holzweg?
 
wenn ich ein neues String Array erzeugen möchte, mache ich dies doch nach folgender Struktur: String[] neuString = new String[]; aber was muss den in die Klammern bei dem new String? oder bin ich gerade komplett auf dem Holzweg?
Die Länge des vorherigen Arrays -1, da du ja ein Element entfernst 😉

Es sollte so aussehen:
Java:
String[] freshArray = new String[nameList.length-1]
 
Du hast ein Array aus Strings. Somit ist jeder String, egal wie lang er ist, ein einziges Element des Arrays. Du hast ja kein Array aus Buchstaben, sondern ein Array aus Strings/Zeichenketten.
 
Jetzt sieht mein Code so aus:
Java:
public static String[] filterArray(String[] nameList, String nameToRemove){
        String[] neuString = new String[nameList.length-1];
        for (int i = 0; i < nameList.length; i++) {
                if (nameToRemove.contains(nameList[i])) {
                    continue;
                } else {
                    neuString[i] = nameList[i];
                }
        }
        return neuString;
        
    }

ich bekomme jetzt die Fehlermeldung "IndexOutOfBounds" aber wieso? 😕
 
Das liegt daran dass du bist nameList.length läufst und dein neues Array einen Index weniger hat 😉

So sollte es funktionieren 😉

Java:
public static String[] filterArray(String[] nameList, String nameToRemove){
        String[] neuString = new String[nameList.length-1];
        for (int i = 0,j = 0; i < nameList.length; i++) {
                if (nameList[i].equals(nameToRemove)) {
                    continue;
                } else {
                    neuString[j] = nameList[i];
                    j++;
                }
        }
        return neuString;
    }
 
Zuletzt bearbeitet:
Das liegt daran dass du bist nameList.length läufst und dein neues Array einen Index weniger hat 😉
Das liegt daran dass du bist nameList.length läufst und dein neues Array einen Index weniger hat 😉

So sollte es funktionieren 😉

Java:
public static String[] filterArray(String[] nameList, String nameToRemove){
        String[] neuString = new String[nameList.length-1];
        for (int i = 0,j = 0; i < nameList.length; i++) {
                if (nameList[i].equals(nameToRemove)) {
                    continue;
                } else {
                    neuString[j] = nameList[i];
                    j++;
                }
        }
        return neuString;
    }
Danke sehr für die Hilfe 🙂
 

Zurück
Oben