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)); }
现有代码的问题
你的代码存在两个核心问题:
- 起始位置定位错误:用
string.indexOf('/') + 2会在https这类多字符协议的URL中,把起始点指向://的第二个/,导致截取的服务器名开头缺失; - 无斜杠场景未处理:当
://后没有斜杠时,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
相关产品推荐
相关产品推荐

