Find the index in an ArrayList that contains a string
Asked Answered
D

2

10

By using Jsoup I parse HTML from a website to populate an ArrayList with what I needed to fetch from the website. So now I have an ArrayList that is filled with strings. I want to find the index in that list that contains a certain string. For example, I know that somewhere in the list, in some index, there is the string(literal) "Claude" but I can't seem to make any code that finds the index that contains "Claude" in the ArrayList... here is what I have tried but returns -1 (not found):

ArrayList < String > list = new ArrayList < String > ();
String claude = "Claude";

Document doc = null;
try {
    doc = Jsoup.connect("http://espn.go.com/nhl/team/stats/_/name/phi/philadelphia-flyers").get();
} catch (IOException e) {
    e.printStackTrace();
}
for (Element table: doc.select("table.tablehead")) {
    for (Element row: table.select("tr")) {
        Elements tds = row.select("td");
        if (tds.size() > 6) {
            String a = tds.get(0).text() + tds.get(1).text() + tds.get(2).text() + tds.get(3).text() + tds.get(4).text() + tds.get(5).text() + tds.get(6).text();

            list.add(a);

            int claudesPos = list.indexOf(claude);
            System.out.println(claudesPos);
        }
    }
}
Dragonet answered 20/2, 2013 at 6:26 Comment(5)
Is Claude a part of the bigger string, or a string in the list on it's own?Stilbite
Try to print the String a and check for the "Claude". It shouldnt be there. Work on how you iterate the html tags using JSoupTeen
I don't see any reason of getting -1 , if "Claude" is added to the list. lookout for extra spaces while inserting, may use trim before inserting. Case also matter, "Claude" is different from "claude".Bashemath
From the look of your code, you're going to need walk the ArrayList, element by element doing a String#contains on each elementOneill
okay.. and Rohit Jain - Claude is part of a bigger string.Dragonet
Z
29

You're confusing String.indexOf and List.indexOf. Considering the following list:

list[0] = "Alpha Bravo Charlie"
list[1] = "Delta Echo Foxtrot"
list[2] = "Golf Hotel India"

list.indexOf("Foxtrot") => -1
list.indexOf("Golf Hotel India") => 2
list.get(1).indexOf("Foxtrot") => 11

So:

if (tds.size() > 6) {
  // now the string a contains the text of all of the table cells joined together
  String a = tds.get(0).text() + tds.get(1).text() + tds.get(2).text() +
      tds.get(3).text() + tds.get(4).text() + tds.get(5).text() + tds.get(6).text();

  // now the list contains the string
  list.add(a);

  // now you're looking in the list (which has all the table cells' items)
  // for just the string "Claude", which doesn't exist
  int claudesPos = list.indexOf(claude);
  System.out.println(claudesPos);

  // but this might give you the position of "Claude" within the string you built
  System.out.println(a.indexOf(claude));
}

for (int i = 0; i < list.size(); i += 1) {
  if (list.get(i).indexOf(claude) != -1) {
    // list.get(i).contains(claude) works too
    // and this will give you the index of the string containing Claude
    // (but not the position within that string)
    System.out.println(i);
  }
}
Zetes answered 20/2, 2013 at 17:15 Comment(0)
E
1
First check whether it is an instance of String then get index

if (x instanceof String) {
    ...
}

for (int i = 0; i < list.size(); i++) {
    if (list.get(i).getX() == someValue) { // Or use equals() if it actually returns an Object.
        // Found at index i. Break or return if necessary.
    }
}
Emblazonry answered 20/2, 2013 at 8:59 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.