Итак, я использовал Jsoup для сканирования некоторых веб-страниц, и эта проблема с проводной связью возникает.
С выражением регулярного выражения
// Sets the prefix for all pages to prevent navigate to unwanted pages.
String prefix = "https://handbook.unimelb.edu.au/%d/subjects";
// Postfix for search page
String searchPostfix = "(\\?page=\\d+)?$";
// Postfix for subject page
String subjectPostfix = "\\/(\\w+)(\\/.+)?$";
String root = String.format(prefix, "2019");
String pattern = root.replace("/", "\\/").replace(".", "\\.");
Pattern reg1 = Pattern.compile("^" + pattern + searchPostfix);
Pattern reg2 = Pattern.compile("^" + pattern + subjectPostfix);
С этими шаблонами регулярных выражений.Я запустил его со строкой
String s1 = "https://handbook.unimelb.edu.au/2019/subjects/undergraduate";
И с методом:
private String getSubjectCode(String link) {
System.out.println(link);
if (isSubjectPage(link)) {
Matcher subjectMatcher = subjectPattern.matcher(link);
System.out.println(link);
// System.out.println(subjectMatcher.matches()); ## Exception if commented
System.out.println(subjectMatcher.group(0));
System.out.println(subjectMatcher.group(1));
return subjectMatcher.group(1);
}
return null;
}
Что произойдет, если я оставлю эту закомментированную строку без комментария, программа будет работать хорошо.
Однако, если я прокомментирую эту строку
Exception in thread "main" java.lang.IllegalStateException: No match found
at java.base/java.util.regex.Matcher.group(Matcher.java:645)
at Page.Pages.getSubjectCode(Pages.java:54)
at Page.Pages.enqueue(Pages.java:85)
at Crawler.Crawler.parsePage(Crawler.java:41)
at Crawler.Crawler.crawl(Crawler.java:51)
at Main.main(Main.java:9)
Выше приведенное исключение, почему строка печати влияет на работу программы?
Кроме того, без комментариев
System.out.println(subjectMatcher.matches()); // Exception if commented
// out -> true