Получить доменное имя из URL-адреса в Java/Android

В моем приложении мне нужно получить favicon.ico из URL-адреса. (например, "http://google.com/favicon.ico"). Пользователи могут вводить любые URL-адреса, а мне нужно только доменное имя.

Примеры:

http://drive.google.com/bla/bla/bla -> drive.google.com

www.facebook.com/lol -> www.facebook.com

192.168.0.1 -> 192.168.0.1 (but not really necessary)

У кого-нибудь есть способ получить это? Спасибо!


person hansottowirtz    schedule 16.04.2014    source источник
comment
разве вы не можете обернуть его в объект Url и использовать метод getHost()?   -  person peshkira    schedule 17.04.2014


Ответы (1)


Попробуйте использовать что-то вроде

String u = "www.facebook.com/lol";
URL url = new URL(u);
String host = url.getHost(); // should be www.facebook.com

Если вам нужны разные части URL-адреса, посмотрите документацию и другие геттеры здесь: http://developer.android.com/reference/java/net/URL.html

person peshkira    schedule 16.04.2014
comment
Откуда я должен импортировать URL? - person hansottowirtz; 17.04.2014
comment
посмотрите документ;) java.net.URL - person peshkira; 17.04.2014
comment
Это даст вам искаженное исключение. Решение: stackoverflow.com/a/40405173/1137624 - person cegprakash; 03.11.2016
comment
@cegprakash нет, если поймаешь. Предлагаемое вами решение не будет соответствовать многим действительным доменам верхнего уровня. - person peshkira; 03.11.2016
comment
@cegprakash Откуда эта статистика? Почему регулярное выражение может быть единственным возможным решением, если вы не поймаете большинство TLD? - person peshkira; 03.11.2016
comment
Я перепробовал несколько тысяч URL. Я могу поймать любой TLD, просто обновив свое регулярное выражение. - person cegprakash; 03.11.2016
comment
Не будет соответствовать многим действительным доменам верхнего уровня... Может кто-нибудь объяснить это или привести пример? Какое доменное имя не будет работать с кодом в этом ответе? И откуда берется число 50% для искаженных URL-адресов? - person David Rector; 08.10.2018