好的,经过一番搜索,我在Stackoverflow上找到了1个解决方案,但我希望没有额外的库。 How to check for a valid URL in Java?
首先希望这不是重复,但我找不到正确的答案(马上)。我想验证URI(http)在Java中是否有效。我提出了以下测试,但我不能让他们通过。首先我使用getPort()
,然后http://www.google.nl
将在getPort()
上返回-1。这是我想要通过的测试
@Test
public void testURI_Isvalid() throws Exception {
assertFalse(HttpUtils.validateHTTP_URI("ttp://localhost:8080"));
assertFalse(HttpUtils.validateHTTP_URI("ftp://localhost:8080"));
assertFalse(HttpUtils.validateHTTP_URI("http://localhost:8a80"));
assertTrue(HttpUtils.validateHTTP_URI("http://localhost:8080"));
final String justWrong =
"/schedule/get?uri=http://localhost:8080&time=1000000";
assertFalse(HttpUtils.validateHTTP_URI(justWrong));
assertTrue(HttpUtils.validateHTTP_URI("http://www.google.nl"));
}
这是我在删除getPort()
部分后想出来的,但这并未通过我的所有单元测试。
public static boolean validateHTTP_URI(String uri) {
final URI u;
try {
u = URI.create(uri);
} catch (Exception e1) {
return false;
}
return "http".equals(u.getScheme());
}
这是第一个失败的测试,因为我不再验证getPort()部分。希望有人可以帮助我。我想我没有使用正确的类来验证URL?
我不想连接到服务器来验证URI是否正确。至少还没有在这一步。我只想验证方案。
答案 0 :(得分:8)
public static boolean validateHTTP_URI(String uri) {
final URL url;
try {
url = new URL(uri);
} catch (Exception e1) {
return false;
}
return "http".equals(url.getProtocol());
}
我听到/读过(Joshua Bloch,我相信)如果你没有互联网(不再),Url无法正常工作。但我不认为这是真的(不再)了吗?有人可以详细说明。
答案 1 :(得分:-2)
您可以尝试使用此正则表达式:
(?:(?<protocol>http(?:s?)|ftp)(?:\:\/\/)) (?:(?<usrpwd>\w+\:\w+)(?:\@))? (?<domain>[^/\r\n\:]+)? (?<port>\:\d+)? (?<path>(?:\/.*)*\/)? (?<filename>.*?\.(?<ext>\w{2,4}))? (?<qrystr>\??(?:\w+\=[^\#]+)(?:\&?\w+\=\w+)*)* (?<bkmrk>\#.*)?
这将告诉您URL是否有效,它将为您提供protocol
值。我不懂Java,所以我不知道你需要用什么类来验证正则表达式。