import java.util.*;
import java.util.stream.Collectors;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Table;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class ScheduleParser {
final Table
<String,
String, String
> table
= HashBasedTable.
create();
final Document doc
= Jsoup.
connect("http://localhost/index.html").
userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6") .get();
final Elements rows = doc.select("table tr");
for (int r = 0; r < rows.size(); r++) {
final List<Element> columns = rows.get(r).children().stream().filter(e -> e.tagName().equals("td") && !e.attr("colspan").equals("5")).collect(Collectors.toList());
for (int c = 0; c < columns.size(); c++)
table.
put(Integer.
toString(r
) + " ",
Integer.
toString(c
) + " ", columns.
get(c
).
text()); }
for (Table.
Cell<String,
String, String
> cell
: table.
cellSet()) { System.
out.
println(cell.
getRowKey() + " " + cell.
getColumnKey() + " " + cell.
getValue()); }
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOwoKaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmNvbGxlY3QuSGFzaEJhc2VkVGFibGU7CmltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LlRhYmxlOwppbXBvcnQgb3JnLmpzb3VwLkpzb3VwOwppbXBvcnQgb3JnLmpzb3VwLm5vZGVzLkRvY3VtZW50OwppbXBvcnQgb3JnLmpzb3VwLm5vZGVzLkVsZW1lbnQ7CmltcG9ydCBvcmcuanNvdXAuc2VsZWN0LkVsZW1lbnRzOwoKCnB1YmxpYyBjbGFzcyBTY2hlZHVsZVBhcnNlciB7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICBmaW5hbCBUYWJsZTxTdHJpbmcsIFN0cmluZywgU3RyaW5nPiB0YWJsZSA9IEhhc2hCYXNlZFRhYmxlLmNyZWF0ZSgpOwoKICAgICAgICBmaW5hbCBEb2N1bWVudCBkb2MgPSBKc291cC5jb25uZWN0KCJodHRwOi8vbG9jYWxob3N0L2luZGV4Lmh0bWwiKS51c2VyQWdlbnQoIk1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzTlQgNS4xOyBlbi1VUzsgcnYxLjguMS42KSBHZWNrby8yMDA3MDcyNSBGaXJlZm94LzIuMC4wLjYiKQogICAgICAgICAgICAgICAgLmdldCgpOwogICAgICAgIGZpbmFsIEVsZW1lbnRzIHJvd3MgPSBkb2Muc2VsZWN0KCJ0YWJsZSB0ciIpOwogICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgcm93cy5zaXplKCk7IHIrKykgewogICAgICAgICAgICBmaW5hbCBMaXN0PEVsZW1lbnQ+IGNvbHVtbnMgPSByb3dzLmdldChyKS5jaGlsZHJlbigpLnN0cmVhbSgpLmZpbHRlcihlIC0+IGUudGFnTmFtZSgpLmVxdWFscygidGQiKSAmJiAhZS5hdHRyKCJjb2xzcGFuIikuZXF1YWxzKCI1IikpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7CiAgICAgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgY29sdW1ucy5zaXplKCk7IGMrKykKICAgICAgICAgICAgICAgIHRhYmxlLnB1dChJbnRlZ2VyLnRvU3RyaW5nKHIpICsgIiAiLCBJbnRlZ2VyLnRvU3RyaW5nKGMpICsgIiAiLCBjb2x1bW5zLmdldChjKS50ZXh0KCkpOwogICAgICAgIH0KCiAgICAgICAgZm9yIChUYWJsZS5DZWxsPFN0cmluZywgU3RyaW5nLCBTdHJpbmc+IGNlbGwgOiB0YWJsZS5jZWxsU2V0KCkpIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNlbGwuZ2V0Um93S2V5KCkgKyAiICIgKyBjZWxsLmdldENvbHVtbktleSgpICsgIiAiICsgY2VsbC5nZXRWYWx1ZSgpKTsKICAgICAgICB9CiAgICB9Cn0=