gpt4 book ai didi

java - 如何从Java中的绝对http路径获取相对路径

转载 作者:行者123 更新时间:2023-11-30 04:13:16 30 4
gpt4 key购买 nike

我正在尝试用 Java 构建一个网络爬虫,我想知道是否有任何方法可以从给定基本 url 的绝对路径获取相对路径。我正在尝试替换同一域下 html 中的任何绝对路径。

由于 http url 包含不安全字符,我无法使用 How to construct a relative path in Java from two absolute paths (or URLs)? 中所述的 Java URI。 .

我正在使用 jsoup 来解析我的 html,它似乎能够从相对路径获取绝对路径,但反之则不行。

例如在以下 html 的特定 html 中,

"http://www.example.com/mysite/base.html"

在base.html的页面源码中,可以包含:

'<a href="http://www.example.com/myanothersite/new.html"> Another site of mine </a>

我正在尝试缓存此base.html,并对其进行编辑,使其现在包含:

'<a href="../myanothersite/new.html">Another site of mine</a>

最佳答案

一种不同的方法,不需要给定的 baseUrl 并使用更高级的方法。

    String sourceUrl = "http://www.example.com/mysite/whatever/somefolder/bar/unsecure!+?#whätyöühäv€it/site.html"; // your current site
String targetUrl = "http://www.example.com/mysite/whatever/otherfolder/other.html"; // the link target
String expectedTarget = "../../../otherfolder/other.html";
String[] sourceElements = sourceUrl.split("/");
String[] targetElements = targetUrl.split("/"); // keep in mind that the arrays are of different length!
StringBuilder uniquePart = new StringBuilder();
StringBuilder relativePart = new StringBuilder();
boolean stillSame = true;
for(int ii = 0; ii < sourceElements.length || ii < targetElements.length; ii++) {
if(ii < targetElements.length && ii < sourceElements.length &&
stillSame && sourceElements[ii].equals(targetElements[ii]) && stillSame) continue;
stillSame = false;
if(targetElements.length > ii)
uniquePart.append("/").append(targetElements[ii]);
if(sourceElements.length > ii +1)
relativePart.append("../");
}

String result = relativePart.toString().substring(0, relativePart.length() -1) + uniquePart.toString();
System.out.println("result: " + result);

关于java - 如何从Java中的绝对http路径获取相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19092439/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com