2013-02-20 14 views
7

Używając Jsoup, analizuję HTML ze strony internetowej, aby wypełnić ArrayList tym, co było potrzebne do pobrania ze strony internetowej. Teraz mam ArrayList wypełniony ciągami. Chcę znaleźć indeks na tej liście, który zawiera pewien ciąg znaków. Na przykład, wiem, że gdzieś na liście, w jakimś indeksie, znajduje się ciąg (literał) "Claude", ale nie mogę zrobić żadnego kodu, który znajdzie indeks, który contains "Claude" w ArrayList ... oto co próbowałem ale zwraca -1 (nie znaleziono):Znajdź indeks w tablicy ArrayList, która zawiera ciąg

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); 
     } 
    } 
} 
+3

jest 'Claude' częścią większego łańcucha lub ciąg znaków w liście na jego własne? –

+0

Spróbuj wydrukować ciąg 'a' i sprawdź" Claude ". Nie powinno tam być. Pracuj nad sposobem iterowania znaczników html przy użyciu JSoup – LGAP

+0

Nie widzę powodu, aby uzyskać -1, jeśli "Claude" zostanie dodany do listy. szukając dodatkowych spacji podczas wstawiania, mogą użyć przycinania przed włożeniem. Sprawa ma również znaczenie, "Claude" różni się od "claude". – sudmong

Odpowiedz

25

pan myli String.indexOf i List.indexOf. Biorąc pod uwagę następującą 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 

Więc:

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); 
    } 
} 
0
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. 
    } 
}