You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JSoup调用ArrayList中链接触发Malformed URL Exception问题求助

解决JSoup调用ArrayList中链接报MalformedURLException的问题

这种情况确实挺让人头疼的——明明链接硬编码没问题,从ArrayList里取就触发格式错误,我之前排查过类似的问题,给你几个实用的排查和解决方向:

1. 清理链接中的隐藏不可见字符

ArrayList中的链接很可能在存储过程中混入了空格、换行符、全角空格或Unicode控制字符,这些字符肉眼难辨,但会导致URL格式判定失败。硬编码时你手动输入的是干净的字符串,所以没问题。

可以尝试对取出的链接做彻底清理:

String rawUrl = arrayLinks.get(i);
// 先去掉首尾空格,再替换所有中间的空白字符
String cleanUrl = rawUrl.trim().replaceAll("\\s+", "");
// 进一步移除所有非打印控制字符(保留换行、制表符这类常用的)
cleanUrl = cleanUrl.replaceAll("[\\p{Cntrl}&&[^\r\n\t]]", "");
// 再用清理后的链接调用JSoup
article = Jsoup.connect(cleanUrl)...

2. 用URI类正确编码URL各部分

有时候链接中的特殊字符(比如中文、特殊符号)没有被正确编码,硬编码时JSoup可能自动做了兼容,但从列表取出的原始字符串编码不规范。直接用URLEncoder容易破坏URL结构,建议用URI类来处理各部分编码:

String rawUrl = arrayLinks.get(i);
try {
    URL urlObj = new URL(rawUrl);
    // 按URI规范重新构建并编码URL
    URI uri = new URI(
        urlObj.getProtocol(),
        urlObj.getUserInfo(),
        urlObj.getHost(),
        urlObj.getPort(),
        urlObj.getPath(),
        urlObj.getQuery(),
        urlObj.getRef()
    );
    String encodedUrl = uri.toString();
    article = Jsoup.connect(encodedUrl)...
} catch (URISyntaxException e) {
    e.printStackTrace();
}

3. 检查链接是否缺失协议头

很多时候列表中的链接可能省略了http://或https://(比如只存了www.example.com),JSoup的connect方法要求完整的URL协议头,硬编码时你手动补上了就没问题,但从列表取的时候就会报错。

可以自动补全协议头:

String url = arrayLinks.get(i);
// 检查是否已有协议头,没有则默认补https
if (!url.startsWith("http://") && !url.startsWith("https://")) {
    url = "https://" + url;
}
article = Jsoup.connect(url)...

4. 排查链接来源的编码问题

如果你的ArrayList是从文件读取或网页爬取得到的,可能因为读取编码错误导致链接被篡改(比如用GBK读取UTF-8编码的文件,导致中文或特殊字符乱码)。硬编码时你输入的是正确字符,所以不会报错。

可以打印出链接的原始字符编码来排查:

String url = arrayLinks.get(i);
System.out.println("原始链接:" + url);
// 逐个字符输出ASCII值,查看是否有异常字符
for (char c : url.toCharArray()) {
    System.out.printf("字符:%c,ASCII值:%d%n", c, (int) c);
}

如果看到ASCII值小于32的控制字符(除了\r\n\t),或者大于127的异常字符,就说明来源编码有问题,需要调整读取时的编码(比如读取文件时用UTF-8)。


内容的提问来源于stack exchange,提问作者user1672956

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:32:21