Хорошо я нашел 1 решение на Stackoverflow после немного большего количества поиска, но я надеюсь сделать это без дополнительных библиотек. Как проверить на допустимый URL в Java?
Сначала, надо надеяться, это не дубликат, но я не мог найти правильный ответ (сразу же). Я хотел бы проверить это, URI (http) допустим в Java. Я придумал следующие тесты, но я не могу заставить их передавать. Сначала я использовал getPort()
, но затем http://www.google.nl
возвратится-1 на getPort()
. Это - тест, который я хочу пройти
@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, корректно. По крайней мере еще на этом шаге. Я только хочу проверить схему.
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());
}
Я слышал / читал (Джошуа Блох) где-то, что URL-адрес не работает должным образом, если у вас нет Интернета (больше). Но я не думаю, что это правда (больше)? Не мог бы кто-нибудь уточнить.
Вы можете попробовать использовать это регулярное выражение:
(?:(?<protocol>http(?:s?)|ftp)(?:\:\/\/)) (?:(?<usrpwd>\w+\:\w+)(?:\@))? (?<domain>[^/\r\n\:]+)? (?<port>\:\d+)? (?<path>(?:\/.*)*\/)? (?<filename>.*?\.(?<ext>\w{2,4}))? (?<qrystr>\??(?:\w+\=[^\#]+)(?:\&?\w+\=\w+)*)* (?<bkmrk>\#.*)?
Это покажет вам, является ли URL действительным, и даст вам значение протокола
. Я не знаю Java, поэтому не знаю, какой класс нужно использовать для проверки регулярных выражений.