我正在做一个递归的url收获..当我在源代码中找到一个不以“http”开头的链接时,我将它附加到当前的url。问题是,当我遇到动态站点时,没有http的链接通常是当前URL的新参数。例如,如果当前网址类似于http://www.somewebapp.com/default.aspx?pageid=4088,并且在该网页的源代码中有一个链接,即default.aspx?pageid = 2111。在这种情况下,我需要做一些字符串操作;这是我需要帮助的地方 伪代码:
if part of the link found is a contains a substring of the current url
save the substring
save the unique part of the link found
replace whatever is after the substring in the current url with the unique saved part
这在java中会是什么样子?这样做的想法有何不同?感谢。
根据评论,这是我尝试的内容:
if (!matched.startsWith("http")) {
String[] splitted = url.toString().split("/");
java.lang.String endOfURL = splitted[splitted.length-1];
boolean b = false;
while (!b && endOfURL.length() > 5) { // f.bar shortest val
endOfURL = endOfURL.substring(0, endOfURL.length()-2);
if (matched.contains(endOfURL)) {
matched = matched.substring(endOfURL.length()-1);
matched = url.toString().substring(url.toString().length() - matched.length()) + matched;
b = true;
}
}
效果不佳..
答案 0 :(得分:1)
我认为你这样做是错误的。 Java有两个类URL
和URI
,它们能够比"字符串抨击更准确地解析URL / URL字符串"解。例如,URL构造函数URL(URL, String)
将在现有对象的上下文中创建新的URL
对象,而无需担心String是绝对URL还是相对URL。你可以使用这样的东西:
URL currentPageUrl = ...
String linkUrlString = ...
// (Exception handling not included ...)
URL linkUrl = new URL(currentPageUrl, linkUrlString);