如何从android中的String解析url?

时间:2011-06-17 10:06:49

标签: java android

我想从android中的String解析url。示例String是

"This is a new message. The content of the message is in 'http://www.example.com/asd/abc' "

我想在不使用subString方法的情况下解析字符串中的URL http://www.example.com/asd/abc

6 个答案:

答案 0 :(得分:31)

已更新:

您可以使用带有Patterns.WEB_URL正则表达式的正则表达式来查找文本中的所有网址。


<强>原始

您可以使用Uri.parse(String uriString)功能。

答案 1 :(得分:30)

使用此:

public static String[] extractLinks(String text) {
    List<String> links = new ArrayList<String>();
    Matcher m = Patterns.WEB_URL.matcher(text);
    while (m.find()) {
        String url = m.group();
        Log.d(TAG, "URL extracted: " + url);
        links.add(url);
    }

    return links.toArray(new String[links.size()]);
}

答案 2 :(得分:6)

是的,可能。 尝试使用以下代码示例

ArrayList retrieveLinks(String text) {
        ArrayList links = new ArrayList();

        String regex = "\\(?\\b(http://|www[.])[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(text);
        while(m.find()) {
        String urlStr = m.group();
        char[] stringArray1 = urlStr.toCharArray();

        if (urlStr.startsWith("(") && urlStr.endsWith(")"))
        {

            char[] stringArray = urlStr.toCharArray(); 

            char[] newArray = new char[stringArray.length-2];
            System.arraycopy(stringArray, 1, newArray, 0, stringArray.length-2);
            urlStr = new String(newArray);
            System.out.println("Finally Url ="+newArray.toString());

        }
        System.out.println("...Url..."+urlStr);
        links.add(urlStr);
        }
        return links;
        }

由于 迪帕克

答案 3 :(得分:4)

如果要解析链接以进行样式设置,Linkify是一个优雅的解决方案:

descriptionTextView.setText("This text contains a http://www.url.com")
Linkify.addLinks(descriptionTextView, Linkify.WEB_URLS);

您还可以更改链接的默认颜色:

descriptionTextView.setLinkTextColor(ContextCompat.getColor(getContext(),
                R.color.colorSecondary));

结果如下:

enter image description here

答案 4 :(得分:0)

您可以创建一个新的URL,将字符串作为构造函数的参数传递。然后,您可以使用URL类上的各种方法来访问URL的不同部分。

好的,我知道这不是你的意思。您可以使用正则表达式,但使用子字符串是最简单的方法。你为什么不想用呢?

答案 5 :(得分:0)

如果字符串总是相似的,那么快速修复就是在单引号上使用StringTokenizer。然后你只需要拿第二个标记。