Я создаю веб-искатель в какой-то момент. Я получаю HTML-код с начальной страницы, а затем передаю его другому методу, который получает от него ссылки. Я предполагаю, что я всегда использую одну и ту же страницу, поэтому я только создаю ее для работы над этим HTML. Проблема в том, что метод возвращает повторяющиеся ссылки, и я не могу понять, почему. Я проверил HTML, который я втягиваю, и это правильно, поэтому проблема заключается в этом методе. Вот код:
public static ArrayList<String> linkParser(String htmlContents) {
ArrayList<String> links = new ArrayList<String>();
int start = 0;
boolean done = false;
while (start < htmlContents.length() && !done) {
int startIndex = htmlContents.indexOf("<A HREF", start);
if (startIndex != -1) {
startIndex += 9;
String currentLink = "";
int i = startIndex;
while (htmlContents.charAt(i) != '"') {
currentLink += htmlContents.charAt(i);
start++;
i++;
}
links.add(currentLink);
} else {
done = true;
}
}
return links;
}
Вот результат, когда я его называю:
[http://www.cs.uwec.edu/~stevende/cs145testpages/page1.htm, http://www.cs.uwec.edu/~stevende/cs145testpages/page1.htm, http://www.cs.uwec.edu/~stevende/cs145testpages/page1.htm, http://www.cs.uwec.edu/~stevende/cs145testpages/page1.htm, http://www.cs.uwec.edu/~stevende/cs145testpages/page1.htm, http://www.cs.uwec.edu/~stevende/cs145testpages/page1.htm, page2.htm, page2.htm, page2.htm, page2.htm, page2.htm, page2.htm, page2.htm, page2.htm, page2.htm, page2.htm, foo://www.cs.uwec.edu/~stevende/foo/default.htm, foo://www.cs.uwec.edu/~stevende/foo/default.htm, http://www.foo.cs.uwec.edu/~stevende/cs145testpages/default.htm, http://www.foo.cs.uwec.edu/~stevende/cs145testpages/default.htm, http://www.cs.uwec.edu/~stevende/cs145testpages/foo.htm, http://www.cs.uwec.edu/~stevende/cs145testpages/foo.htm, http://www.cs.uwec.edu/~stevende/cs145testpages/foo.htm, http://www.goduke.com/, http://www.goduke.com/, http://www.goduke.com/, http://www.goduke.com/, http://www.goduke.com/]
Вот страница, которую я использую. Любая помощь действительно ценится!
Этот код будет работать
public static ArrayList linkParser (String htmlContents) {
ArrayList links = new ArrayList(); int start = 0;
boolean done = false;
while (!done) {
htmlContents = htmlContents.substring(start);
int startIndex = htmlContents.indexOf("<A HREF");
if (startIndex != -1) {
startIndex += 9;
String currentLink = "";
while (htmlContents.charAt(startIndex) != '"') {
currentLink += htmlContents.charAt(startIndex);
startIndex++;
}
start = startIndex;
links.add(currentLink);
} else {
done = true;
}
}
return links;
}