当前位置:  开发笔记 > 编程语言 > 正文

如何检测字符串中URL的存在

如何解决《如何检测字符串中URL的存在》经验,为你挑选了2个好方法。

我有一个输入字符串说Please go to http://stackoverflow.com.检测到String的url部分,并且许多浏览器/ IDE /应用程序自动添加锚点.所以它变成了Please go to http://stackoverflow.com.

我需要使用Java做同样的事情.



1> OscarRyz..:

使用java.net.URL!

嘿,为什么不在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(""+ url + " " );    
        } 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 http://stackoverflow.com and then mailto:oscarreyes@wordpress.com to download a file from    ftp://user:pass@someserver/someFile.txt

当然,可以以不同方式处理不同的协议.例如,您可以使用URL类的getter获取所有信息

 url.getProtocol();

或者其他属性:spec,port,file,query,ref等

http://java.sun.com/javase/6/docs/api/java/net/URL.html

处理所有协议(至少所有java平台都知道的协议)并作为额外的好处,如果有任何java当前无法识别的URL并最终被合并到URL类中(通过库更新),您将获得它透明!


我喜欢Jeff Atwoods专门针对java的文章,因为你根本不需要处理正则表达式.但他的文章*确实*对于经常嵌入括号等内容的URL有好处.组合将非常有效.
我刚才知道,URL类已损坏:http://www.youtube.com/watch?v = wDN_EYUvUq0

2> Michael Burr..:

虽然它不是特定于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);
}

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有