Rileva ed estrae l’url da una stringa?

Questa è una domanda facile, ma proprio non capisco. Voglio rilevare l’url in una stringa e sostituirli con uno short.

Ho trovato questa espressione da StackOverflow, ma il risultato è solo http

 Pattern p = Pattern.compile("\\b(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]",Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(str); boolean result = m.find(); while (result) { for (int i = 1; i <= m.groupCount(); i++) { String url=m.group(i); str = str.replace(url, shorten(url)); } result = m.find(); } return html; 

C’è qualche idea migliore?