解读URL';它在Java中的应用非常广泛

解读URL';它在Java中的应用非常广泛,java,string,url,web,Java,String,Url,Web,我有一个URL字段的用户输入。我希望他们能够输入任何内容,从“http://andrewducker.wordpress.com/xmlrpc.php到“andrewducker.wordpress.com”,并能够在同一终点结束 我已经浪费了几个小时和URL的各种构造函数混在一起,并没有得到令人满意的结果,我应该自己做字符串检查并构造它吗 (如果你感兴趣,那是因为我正在写一篇文章,将从Delicious发布到Wordpress的链接,我需要用户告诉我他们的Wordpress URL,以便我可以

我有一个URL字段的用户输入。我希望他们能够输入任何内容,从“http://andrewducker.wordpress.com/xmlrpc.php到“andrewducker.wordpress.com”,并能够在同一终点结束

我已经浪费了几个小时和URL的各种构造函数混在一起,并没有得到令人满意的结果,我应该自己做字符串检查并构造它吗

(如果你感兴趣,那是因为我正在写一篇文章,将从Delicious发布到Wordpress的链接,我需要用户告诉我他们的Wordpress URL,以便我可以调用xmlrpc。)


编辑:我应该说清楚-我一直希望/xmlrpc.php位是URL末尾的内容,这是Wordpress标准,所以我不需要做任何复杂的发现。如果它不在那里,我只需要附加它。

使用正则表达式匹配来查找主机部分。例如,如果您匹配此正则表达式“(https?:/)?([^/\?]+)”,则主机是第二个匹配组。

这有两个部分

首先,如果未指定方案部分,则需要在URI前面添加“http://”,例如:

// We could do this with a regex, but its easier to use the built-in parser of the UIR class
URI uri = new URI(uriText);
if (uri.getScheme() == null) {
    uriText = "http://" + uriText;
    uri = new URI(uriText);
}
第二部分比较难,因为它涉及服务器重定向。如果不连接到服务器,
e、 g.
”http://site1.com“
可能等同于
”http://www.site1.com/index.html“

但是
”http://site2.com“
可能等同于
”http://site2.com/en/default.aspx“

您最好的选择可能是创建一个
HttpUrlConnection
并检查301响应,如果您得到了301响应,则使用该响应的URI