Saya menemukan masalah kemarin dengan perpustakaan jsoup.
public class Analyse {
public static void main(String[] args) throws IOException, FileNotFoundException {
try {
PrintStream output = new PrintStream(new File("E://eBot1.txt"));
System.setOut(output);
}
catch (FileNotFoundException fx) {
System.out.println(fx);
}
for (int i = 1527; i < 1542; i++) {
String url = "http://csgolive.eslproseries.de/matchs/view/" + i + "#stats-players";
Document doc = Jsoup.connect(url).get();
String MatchID = doc.select("h4").text();
System.out.println("\n\n" + "Spiel: " + MatchID + "\n\n");
for (Element table : doc.select("table[id=tablePlayers]")) {
for (Element row : table.select("tr")) {
Elements tds2 = row.select("td:not([rowspan])");
int vsTwo = Integer.parseInt(tds2.get(13).text());
int vsThree = Integer.parseInt(tds2.get(14).text());
int vsFour = Integer.parseInt(tds2.get(15).text());
int vsFive = Integer.parseInt(tds2.get(16).text());
int fourKills = Integer.parseInt(tds2.get(20).text());
int fiveKills = Integer.parseInt(tds2.get(21).text());
if (vsTwo > 0) {
System.out.println("Team: " + tds2.get(0).text() + " Player: " + tds2.get(1).text() + " 1v2 Clutch: " + tds2.get(13).text());
}
if (vsThree > 0) {
System.out.println("Team: " + tds2.get(0).text() + " Player: " + tds2.get(1).text() + " 1v3 Clutch: " + tds2.get(14).text());
}
if (vsFour > 0) {
System.out.println("Team: " + tds2.get(0).text() + " Player: " + tds2.get(1).text() + " 1v4 Clutch: " + tds2.get(15).text());
}
if (vsFive > 0) {
System.out.println("Team: " + tds2.get(0).text() + " Player: " + tds2.get(1).text() + " 1v5 Clutch: " + tds2.get(16).text());
}
if (fourKills > 0) {
System.out.println("Team: " + tds2.get(0).text() + " Player: " + tds2.get(1).text() + " 4 Kills: " + tds2.get(20).text());
}
if (fiveKills > 0) {
System.out.println("Team: " + tds2.get(0).text() + " Player: " + tds2.get(1).text() + " 5 Kills: " + tds2.get(21).text());
}
else {
}
}
}
}
}
}
Jadi pada dasarnya, saya ingin menganalisis tabel dari ini (http://csgolive.eslproseries.de/matchs/view/1529#stats-players). Di URL itu, matchID (dalam hal ini 1529) harus ditentukan oleh for-loop. Ini berfungsi dengan baik, begitu pula pernyataan jsoup.connect. Jadi saya mendapat kode html dari website. Sekarang saya ingin memfilter alias dengan tim yang cocok dari tabel. Perintahnya seharusnya
for (Element row : table.select("tr"));
Ini, meskipun membuat saya mendapatkan kesalahan berikut:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 13, Size: 0
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at org.jsoup.select.Elements.get(Elements.java:544)
at org.jsoup.Analyse.main(Analyse.java:42)
Saya sudah mencoba metode untuk menghindari hal ini. Satu-satunya metode yang berhasil adalah dengan menempatkan
for (Element row : table.select("tr:gt(0)"));
Ini hanya memuat entri tabel 2-10, jadi saya selalu melewatkan yang pertama.
Jadi pertanyaan saya adalah: Apakah ada cara agar kesalahan ini tidak terjadi dan tetap mendapatkan semua baris tabel?
EDIT: Saya mengkodekan kemungkinan lain yang mengungkapkan kesalahan sebenarnya: Baris pertama yang diuraikan di tds2.get(13).text() .get(14). dll memberikan IndexOutOfBoundsException. Jadi baris pertama sepertinya kosong. Namun ketika saya mencetaknya ke konsol, semuanya normal.
Terselesaikan:
Diganti
for (Element row : table.select("tr")) {
Dengan
for (int f = 1; f < 11 ; f++) {