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

Java新手求教:如何用indexOf和substring提取URL中的服务器名

从URL中提取服务器名的Java实现问题

我是Java新手,需要编写一个从URL中提取服务器名的函数,具体需求:

  • 对于http://SomeServerName/abcd/dfdf.htm?dfdf=dfdf这类URL,需提取出"SomeServerName";
  • URL不一定以http开头,也可能是https、ftp等,但一定包含://;
  • 需考虑://后无斜杠的情况(例如http://SomeServerName);
  • 只能使用indexOf和substring方法。

以下是我目前编写的代码:

// This is what i got so far

public static String getURL(String string) {
    int startIndex = string.indexOf('/') + 2;

    int endIndex = string.indexOf("/", startIndex);

    return string.substring(startIndex, endIndex);
}

public static void main(String[] args) {
        String string = "https://SomeServerName/abcd/dfdf.htm?dfdf=dfdf";

        System.out.println(getURL(string));
    }

现有代码的问题

你的代码存在两个核心问题:

  1. 起始位置定位错误:用string.indexOf('/') + 2会在https这类多字符协议的URL中,把起始点指向://的第二个/,导致截取的服务器名开头缺失;
  2. 无斜杠场景未处理:当://后没有斜杠时,indexOf("/", startIndex)返回-1,调用substring会直接抛出StringIndexOutOfBoundsException。

修正后的代码

public static String getServerName(String url) {
    // 定位://的结束位置
    int protocolEnd = url.indexOf("://");
    int startIndex = protocolEnd + 3;
    
    // 查找起始位置之后的第一个斜杠
    int endIndex = url.indexOf('/', startIndex);
    
    // 如果没有找到斜杠,将结束索引设为字符串长度,直接取到末尾
    if (endIndex == -1) {
        endIndex = url.length();
    }
    
    return url.substring(startIndex, endIndex);
}

public static void main(String[] args) {
    String testUrl1 = "https://SomeServerName/abcd/dfdf.htm?dfdf=dfdf";
    String testUrl2 = "http://AnotherServer";
    String testUrl3 = "ftp://FileServer/path/file";
    
    System.out.println(getServerName(testUrl1)); // 输出 SomeServerName
    System.out.println(getServerName(testUrl2)); // 输出 AnotherServer
    System.out.println(getServerName(testUrl3)); // 输出 FileServer
}

代码说明

  • 通过indexOf("://")精准定位协议结束点,确保服务器名起始索引准确;
  • 针对无后续斜杠的场景,判断endIndex为-1时,将其设为字符串长度,让substring自动截取到末尾;
  • 调整函数名和参数名为getServerName、url,让代码语义更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:15:31