Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove a specific string from an array of string

I have an array like this:

String n[] = {"google","microsoft","apple"};

What I want to do is to remove "apple".

My problem is very basic,however,I searched the website and I found out that java doesn't really support the deleting feature from an array.I also heard to use Java Utils, because it's so simple to remove an item....I tried to find Java Utils on google, but almost all links are dead.

So finally...is there any way to remove a string from an array of string?

Even if I use an ArrayList I can't find a method to generate a random item in it! For ex: in a normal array I generate a string like this:

String r = myAL[rgenerator.nextInt(myAL.length)];

In an arraylist it doesn't work....maybe you know a solution...

like image 358
user1015311 Avatar asked Oct 29 '11 17:10

user1015311


2 Answers

Define "remove".

Arrays are fixed length and can not be resized once created. You can set an element to null to remove an object reference;

for (int i = 0; i < myStringArray.length(); i++)
{
    if (myStringArray[i].equals(stringToRemove))
    {
        myStringArray[i] = null;
        break;
    }
}

or

myStringArray[indexOfStringToRemove] = null;

If you want a dynamically sized array where the object is actually removed and the list (array) size is adjusted accordingly, use an ArrayList<String>

myArrayList.remove(stringToRemove); 

or

myArrayList.remove(indexOfStringToRemove);

Edit in response to OP's edit to his question and comment below

String r = myArrayList.get(rgenerator.nextInt(myArrayList.size()));
like image 190
Brian Roach Avatar answered Sep 28 '22 09:09

Brian Roach


It is not possible in on step or you need to keep the reference to the array. If you can change the reference this can help:

      String[] n = new String[]{"google","microsoft","apple"};
      final List<String> list =  new ArrayList<String>();
      Collections.addAll(list, n); 
      list.remove("apple");
      n = list.toArray(new String[list.size()]);

I not recommend the following but if you worry about performance:

      String[] n = new String[]{"google","microsoft","apple"};
      final String[] n2 = new String[2]; 
      System.arraycopy(n, 0, n2, 0, n2.length);
      for (int i = 0, j = 0; i < n.length; i++)
      {
        if (!n[i].equals("apple"))
        {
          n2[j] = n[i];
          j++;
        }      
      }

I not recommend it because the code is a lot more difficult to read and maintain.

like image 30
LuisKarlos Avatar answered Sep 28 '22 10:09

LuisKarlos