kahlur
kahlur

Reputation: 11

Java: Removing item from array because of character

Lets say you have an array like this: String[] theWords = {"hello", "good bye", "tomorrow"}. I want to remove/ignore all the strings in the array that have the letter 'e'. How would I go about doing that? My thinking is to go:

for (int arrPos = 0; arrPos < theWords.length; arrPos++) { //Go through the array
  for (int charPos = 0; charPos < theWords[arrPos].length(); charPos++) { //Go through the strings in the array
    if (!((theWords[arrPos].charAt(charPos) == 'e')) { //Finds 'e' in the strings
      //Put the words that don't have any 'e' into a new array;
      //This is where I'm stuck
    }
  }
}

I'm not sure if my logic works and if I'm even on the right track. Any responses would be helpful. Many thanks.

Upvotes: 1

Views: 124

Answers (4)

Sameer Khanal
Sameer Khanal

Reputation: 1334

The problem you have is that you need to declare and instantiate the String array before you even know how many elements are going to be in it (since you wouldn't know how many strings would not contain 'e' before going through the loop). Instead, if you use an ArrayList you do not need to know the required size beforehand. Here is my code from start to end.

String[] theWords = { "hello", "good bye", "tomorrow" };

    //creating a new ArrayList object
    ArrayList<String> myList = new ArrayList<String>();

    //adding the corresponding array contents to the list.  
    //myList and theWords point to different locations in the memory. 
    for(String str : theWords) {
        myList.add(str);
    }

    //create a new list containing the items you want to remove
    ArrayList<String> removeFromList = new ArrayList<>();
    for(String str : myList) {
        if(str.contains("e")) {
            removeFromList.add(str);
        }
    }

    //now remove those items from the list
    myList.removeAll(removeFromList);

    //create a new Array based on the size of the list when the strings containing e is removed
    //theWords now refers to this new Array. 
    theWords = new String[myList.size()];
    //convert the list to the array
    myList.toArray(theWords);

    //now theWords array contains only the string(s) not containing 'e'
    System.out.println(Arrays.toString(theWords));

Upvotes: 0

Biruk Misanaw
Biruk Misanaw

Reputation: 141

It would be simple if you use ArrayList. importing import java.util.ArrayList;

    ArrayList<String> theWords = new ArrayList<String>();
    ArrayList<String> yourNewArray = new ArrayList<String>;//Initializing you new array
    theWords.add("hello");
    theWords.add("good bye");
    theWords.add("tommorow");



    for (int arrPos = 0; arrPos < theWords.size(); arrPos++) { //Go through the array

        if(!theWords.get(arrPos).contains("e")){
            yourNewArray.add(theWords.get(arrPos));// Adding non-e containing string into your new array
            }
    }

Upvotes: 0

castletheperson
castletheperson

Reputation: 33496

One easy way to filter an array is to populate an ArrayList with if in a for-each loop:

List<String> noEs = new ArrayList<>();
for (String word : theWords) {
    if (!word.contains("e")) {
        noEs.add(word);
    }
}

Another way in Java 8 is to use Collection#removeIf:

List<String> noEs = new ArrayList<>(Arrays.asList(theWords));
noEs.removeIf(word -> word.contains("e"));

Or use Stream#filter:

String[] noEs = Arrays.stream(theWords)
                      .filter(word -> !word.contains("e"))
                      .toArray(String[]::new);

Upvotes: 1

Khuzi
Khuzi

Reputation: 2912

You can directly use contains() method of String class to check if "e" is present in your string. That will save your extra for loop.

Upvotes: 0

Related Questions