2013-02-20 46 views
7

Bằng cách sử dụng Jsoup tôi phân tích cú pháp HTML từ trang web để điền một ArrayList với những gì tôi cần tìm nạp từ trang web. Vì vậy, bây giờ tôi có một ArrayList được lấp đầy bằng các chuỗi. Tôi muốn tìm chỉ mục trong danh sách có chứa một chuỗi nhất định. Ví dụ, tôi biết rằng một nơi nào đó trong danh sách, trong một số chỉ số, có chuỗi (chữ) "Claude" nhưng tôi không thể làm cho bất kỳ mã nào tìm thấy chỉ mục rằng contains "Claude" trong ArrayList ... đây là những gì tôi đã cố gắng nhưng trả -1 (không tìm thấy):Tìm chỉ mục trong một ArrayList có chứa một chuỗi

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

là 'Claude' một phần của chuỗi lớn hơn, hoặc một chuỗi trong danh sách trên riêng của nó? –

+0

Cố gắng in chuỗi 'a' và kiểm tra" Claude ". Nó không nên ở đó. Làm việc về cách bạn lặp lại các thẻ html bằng cách sử dụng JSoup – LGAP

+0

Tôi không thấy bất kỳ lý do nào để nhận -1, nếu "Claude" được thêm vào danh sách. Lookout cho không gian thêm trong khi chèn, có thể sử dụng trim trước khi chèn. Trường hợp cũng quan trọng, "Claude" khác với "claude". – sudmong

Trả lời

25

Bạn đang bối rối String.indexOfList.indexOf. Xét danh sách sau đây:

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 

Vì vậy:

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. 
    } 
} 
Các vấn đề liên quan