如何检测字符串中是否存在 URL
我有一个输入字符串说。检测到字符串的 url 部分,许多浏览器/IDE/应用程序会自动添加锚点。所以它变成了.Please go to http://stackoverflow.com
<a href=""></a>
Please go to <a href='http://stackoverflow.com'>http://stackoverflow.com</a>
我需要使用Java做同样的事情。
我有一个输入字符串说。检测到字符串的 url 部分,许多浏览器/IDE/应用程序会自动添加锚点。所以它变成了.Please go to http://stackoverflow.com
<a href=""></a>
Please go to <a href='http://stackoverflow.com'>http://stackoverflow.com</a>
我需要使用Java做同样的事情。
嘿,为什么不在java中使用这个“java.net.URL”的核心类,让它验证URL。
虽然下面的代码违反了“仅在特殊情况下使用例外”的黄金原则,但对我来说,试图为Java平台上已经成熟的事物重新发明轮子是没有意义的。
代码如下:
import java.net.URL;
import java.net.MalformedURLException;
// Replaces URLs with html hrefs codes
public class URLInString {
public static void main(String[] args) {
String s = args[0];
// separate input by spaces ( URLs don't have spaces )
String [] parts = s.split("\\s+");
// Attempt to convert each item into an URL.
for( String item : parts ) try {
URL url = new URL(item);
// If possible then replace with anchor...
System.out.print("<a href=\"" + url + "\">"+ url + "</a> " );
} catch (MalformedURLException e) {
// If there was an URL that was not it!...
System.out.print( item + " " );
}
System.out.println();
}
}
使用以下输入:
"Please go to http://stackoverflow.com and then mailto:oscarreyes@wordpress.com to download a file from ftp://user:pass@someserver/someFile.txt"
生成以下输出:
Please go to <a href="http://stackoverflow.com">http://stackoverflow.com</a> and then <a href="mailto:oscarreyes@wordpress.com">mailto:oscarreyes@wordpress.com</a> to download a file from <a href="ftp://user:pass@someserver/someFile.txt">ftp://user:pass@someserver/someFile.txt</a>
当然,不同的协议可以用不同的方式处理。您可以使用URL类的getters获取所有信息,例如
url.getProtocol();
或者其余的属性:规范,端口,文件,查询,引用等
http://java.sun.com/javase/6/docs/api/java/net/URL.html
处理所有协议(至少是Java平台知道的所有协议),并且作为额外的好处,如果有任何JAVA当前无法识别的URL并最终被合并到URL类中(通过库更新),您将透明地获得它!
虽然它不是特定于Java的,但Jeff Atwood最近发布了一篇文章,介绍了在尝试在任意文本中查找和匹配URL时可能遇到的陷阱:
它提供了一个很好的正则表达式,可以与您需要用于正确(或多或少)处理parens的代码片段一起使用。
正则表达式:
\(?\bhttp://[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]
帕伦清理:
if (s.StartsWith("(") && s.EndsWith(")"))
{
return s.Substring(1, s.Length - 2);
}