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

使用indexOf提取URL协议的Java代码报错求助

代码问题分析及正确实现

现有代码的问题

  • 硬编码覆盖输入参数:方法内直接把url变量赋值为固定的https网址,完全忽略了传入的参数,测试用例可能传入的是http开头的URL,导致返回结果和预期不符。
  • 协议起始位置逻辑错误:用url.indexOf("https")获取协议起始位置,只适配https协议,遇到http、ftp等其他协议时,该方法会返回-1,调用substring会抛出StringIndexOutOfBoundsException。逻辑上协议是从URL开头(索引0)开始的,不需要查找特定协议字符串。
  • 未处理非法URL情况:如果传入的URL不包含://,endProtocol会是-1,此时调用substring会直接报错。

正确实现方式

public String getProtocol(String url) {
    // 处理空输入
    if (url == null || url.isEmpty()) {
        return null; // 也可根据需求抛出IllegalArgumentException
    }
    
    int protocolEndIndex = url.indexOf("://");
    // 检查是否存在协议分隔符
    if (protocolEndIndex == -1) {
        return null; // 或返回空字符串,根据业务需求调整非法URL的处理逻辑
    }
    
    // 从开头截取到://之前的部分,即为协议
    return url.substring(0, protocolEndIndex);
}

验证说明

传入"http://www.example.com"会返回"http",传入"ftp://ftp.example.org"会返回"ftp",传入无协议的非法URL"www.example.com"会返回null(可根据实际需求调整该场景的返回值)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:05:42