21

I'm familiar with the ways I can get an element position in array, especially the ones showed here: Element position in array

But my problem is I can't figure out how to convert this code to fit my needs.

What I want to check is if a String has a match in an ArrayList and if so, what's the index of the String in the ArrayList.

The annoying part is I managed to verify the String is in the ArrayList (see first line of my code)

listPackages is the ArrayList

current_package is the String I want to find its position in listPackages.

Here's my code:

if (listPackages.contains(current_package)) {

        int position = -1;
        for(int j = 0; j < listPackages.size(); j++) {

            if(listPackages[j] == current_package) {
              position = j;
                  break;
              }
            }
    }

Would appreciate any help!

Thanks!

2
  • 1
    Also, please don't use == to compare objects in Java, even Strings. Always use equals method. Commented Sep 28, 2011 at 9:56
  • Thanks, you're right... honest mistake of copy-paste :) Commented Sep 28, 2011 at 9:58

4 Answers 4

44

Use indexOf:

int index = listPackages.indexOf(current_package);

Note that you shouldn't generally use == to compare strings - that will compare references, i.e. whether the two values are references to the same object, rather than to equal strings. Instead, you should call equals(). That's probably what was going wrong with your existing code, but obviously using indexOf is a lot simpler.

Sign up to request clarification or add additional context in comments.

Comments

3

just use the call listPackages.indexOf(current_package);

ArrayList.contains(Object o) calls indexOf(Object o) internally in ArrayList:

/**
 * Returns <tt>true</tt> if this list contains the specified element.
 * More formally, returns <tt>true</tt> if and only if this list contains
 * at least one element <tt>e</tt> such that
 * <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>.
 *
 * @param o element whose presence in this list is to be tested
 * @return <tt>true</tt> if this list contains the specified element
 */
public boolean contains(Object o) {
return indexOf(o) >= 0;
}

Comments

2

Hope this will help you.change your code like this:

if (listPackages.contains(current_package)){
int position=listPackages.indexOf(current_package);
}

Also if you will make position variable as global you can access its value outside this block of code. :)

2 Comments

Works but no need to traverse the list twice. Just use indexOf. If the arraylist doesn't contain the string this will return -1
Yes you are right.But what if that ArrayList doesnot contain a String and you will try to find it's indexOf.Will there be any exception?I guess so but i have not tried this type though.
1

use the indexof method to get the position -

listPackages.indexOf(current_package)

http://download.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html#indexOf(java.lang.Object)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.