我需要浏览大量的字符串url并从中提取域名.
例如:
http://www.stackoverflow.com/questions将摘录www.stackoverflow.com
我最初使用,new URL(theUrlString).getHost()但URL对象初始化为进程增加了大量时间,似乎不需要.
是否有更快的方法来提取可靠的主机名?
谢谢
编辑:我的错误,是的www.将包含在上面的域名示例中.此外,这些网址可能是http或https
aio*_*obe 37
如果你想处理https等,我建议你做这样的事情:
int slashslash = url.indexOf("//") + 2;
domain = url.substring(slashslash, url.indexOf('/', slashslash));
Run Code Online (Sandbox Code Playgroud)
请注意,这包括www部分(就像URL.getHost()会做的那样),它实际上是域名的一部分.
通过评论编辑请求
以下两种方法可能会有所帮助:
/**
* Will take a url such as http://www.stackoverflow.com and return www.stackoverflow.com
*
* @param url
* @return
*/
public static String getHost(String url){
if(url == null || url.length() == 0)
return "";
int doubleslash = url.indexOf("//");
if(doubleslash == -1)
doubleslash = 0;
else
doubleslash += 2;
int end = url.indexOf('/', doubleslash);
end = end >= 0 ? end : url.length();
int port = url.indexOf(':', doubleslash);
end = (port > 0 && port < end) ? port : end;
return url.substring(doubleslash, end);
}
/** Based on : http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.3_r1/android/webkit/CookieManager.java#CookieManager.getBaseDomain%28java.lang.String%29
* Get the base domain for a given host or url. E.g. mail.google.com will return google.com
* @param host
* @return
*/
public static String getBaseDomain(String url) {
String host = getHost(url);
int startIndex = 0;
int nextIndex = host.indexOf('.');
int lastIndex = host.lastIndexOf('.');
while (nextIndex < lastIndex) {
startIndex = nextIndex + 1;
nextIndex = host.indexOf('.', startIndex);
}
if (startIndex > 0) {
return host.substring(startIndex);
} else {
return host;
}
}
Run Code Online (Sandbox Code Playgroud)
您希望在实施"快速"方式取消URL时要非常小心.URL中存在许多可能导致"快速"方法失败的可变性.例如:
方案(协议)部分可以用大写和小写字母的任意组合来编写; 例如"http","Http"和"HTTP"是等价的.
权限部分可以可选地包括用户名和/或端口号,如" http://you@example.com:8080/index.html "中所示.
由于DNS不区分大小写,因此URL的主机名部分也(有效地)不区分大小写.
% - 对URL中的方案或权限组件中的未保留字符进行编码是合法的(尽管非常不规则).在匹配(或剥离)方案或解释主机名时,您需要考虑这一点.具有%编码字符的主机名被定义为等同于解码了%编码序列的主机名.
现在,如果您完全控制生成正在剥离的URL的进程,您可能会忽略这些细节.但如果它们是从文档或网页中获取的,或者是由人类输入的,那么建议您考虑如果您的代码遇到"异常"URL会发生什么.
如果您关注的是构建URL对象所需的时间,请考虑使用URI对象.除了其他好处之外,URI对象不会尝试对主机名部分进行DNS查找.
| 归档时间: |
|
| 查看次数: |
43778 次 |
| 最近记录: |