给定一个URL,我想提取域名(它不应该包含'www'部分).网址可以包含http/https.这是我写的java代码.虽然它似乎工作正常,有没有更好的方法或有一些边缘情况,可能会失败.
public static String getDomainName(String url) throws MalformedURLException{
if(!url.startsWith("http") && !url.startsWith("https")){
url = "http://" + url;
}
URL netUrl = new URL(url);
String host = netUrl.getHost();
if(host.startsWith("www")){
host = host.substring("www".length()+1);
}
return host;
}
Run Code Online (Sandbox Code Playgroud)
输出:google.com
我想知道在java中是否有解析器或库用于提取URL中的二级域(SLD) - 或者无法使用算法或正则表达式来执行相同操作.例如:
URI uri = new URI("http://www.mydomain.ltd.uk/blah/some/page.html");
String host = uri.getHost();
System.out.println(host);
Run Code Online (Sandbox Code Playgroud)
打印:
mydomain.ltd.uk
Run Code Online (Sandbox Code Playgroud)
现在我想做的是强有力地识别SLD("ltd.uk")组件.有任何想法吗?
编辑:我理想地寻找一般解决方案,所以我在"police.uk"中匹配".uk",在"bbc.co.uk"中匹配".co.uk",在"amazon"中匹配".com" .COM".
谢谢
从没有子域的URL获取域的正确方法是什么?
在Java中,您可以从字符串中创建新URL(urlString)并在URL上调用getHost(),但是您有子域名.
问题是因为可能存在以下主机:subhost.example.com和subhost.example.co.uk
这两个部分领域还有其他几个领域,如co.uk(请参阅https://wiki.mozilla.org/TLD_List上的列表).
在我看来,只获取域名的唯一正确方法是通过TLD列表进行搜索,从主机末尾删除TLD,并在主机的最后一段时间之前取走所有内容.是否有现成的方法可以做到这一点?我没有在java.net.URL中看到一个,我检查了一些apache公共但在那里找不到.
有没有人知道正则表达式匹配Domain.CCTLD?我不想要子域名,只需要"原子域名".例如,docs.google.com不匹配,但google.com确实如此.然而,像.co.ukCCTLD 这样的东西变得复杂.有谁知道解决方案?提前致谢.
编辑:我意识到我还必须处理多个子域,比如john.doe.google.co.uk.现在比以往任何时候都需要解决方案:P.
我有一个存储在 .txt 文件中的 URL 列表(我使用的是 Windows 7)。
URL 的格式是这样的:
somesite1.com
somesite2.com
somesite3.com
sub1.somesite3.com
sub2.somesite3.com
sub3.somesite3.com
sub1.somesite3.net
sub1.somesite1.org
Run Code Online (Sandbox Code Playgroud)
在notepad++中,有一个选项可以使用“用正则表达式查找替换”,并且我相当确定gvim允许用户使用正则表达式(尽管我不完全确定如何在Gvim中使用它们)。
无论如何,我不知道要在查找和替换框中放入什么,以便它可以遍历文件的内容并只留下根域。如果操作正确,上面的示例列表将变成这样:
somesite1.com
somesite2.com
somesite3.com
somesite3.com
somesite3.com
somesite3.com
somesite3.net
somesite1.org
Run Code Online (Sandbox Code Playgroud)
有人可以帮我吗?