0

我想从字符串中获取 URL,以便可以在 WebView.

示例字符串:

exp 1- Hello dilip refer this url www.google.com.
exp 2- hi ramesh this is good for android http://android.com

我只想要www.google.com以及http://android.com如何将它们从字符串中拆分出来

4

4 回答 4

2

如果您只是想从字符串中检索 URL,我建议您只需在 stackoverflow 上查找问题。

像这样:

public static final String URL_REGEX = "^((https?|ftp)://|(www|ftp)\\.)?[a-z0-9-]+(\\.[a-    z0-9-]+)+([/?].*)?$";

 Pattern p = Pattern.compile(URL_REGEX);
 Matcher m = p.matcher("example.com");//replace with string to compare
 if(m.find()) {
 System.out.println("String contains URL");
}

从这篇文章:https ://stackoverflow.com/a/11007981/1164919 你会发现更多关于如何在同一个线程中执行此操作的片段和建议。

但是,如果您想自己动手来了解它是如何工作的。您还可以制作自己的简单片段来检测字符串中是否存在 URL。例如,您也可以使用 , if(String.Contains("something"))。如果您的输入存在于字符串中,这将简单地返回 true 或 false。

那里有几十个例子等着你去阅读。搜索类似的内容:regex或者如果这很难,String.split等等。

于 2013-05-18T14:18:12.723 回答
1

我建议将字符串拆分为所有没有空格的子字符串,然后选择包含“。”的子字符串。嵌入其他字符之间。在正常的英语中,一个“。” 仅倾向于出现在 URL 中。

于 2013-05-18T14:11:48.010 回答
1

这是一种可能的解决方案。下面的正则表达式假定它在一个句点跟在一个字母后面时找到了一个 URL,并且一个字母紧跟在那个句点后面。以下是它将匹配的一些示例:

t.t
hello.aspx
www.google.com
http://android.com
http://android.com/test/test.aspx
https://www.stackoverflow.com/questions.html?type=android
www.google.com/android/games.aspx#hello

这是正则表达式(与 IgnoreCase 选项一起使用):

(https?://)?[-A-Z0-9]+\.[-A-Z0-9.]+(/[-A-Z0-9+&@#/%=~_|!:,.;?]*)?

对您的示例文本运行它会返回您想要的两个 URL。

这里有一些使用这个正则表达式的示例 Java 代码:

String testInputString = "Test 1 www.google.co.uk Test 2 www.google.co.in Test 3 www.google.com Test 4 http://android.com Test 5 meta.stackoverflow.com";
Pattern p = Pattern.compile("(https?://)?[-A-Z0-9]+\\.[-A-Z0-9.]+(/[-A-Z0-9+&@#/%=~_|!:,.;?]*)?", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
Matcher m = p.matcher(testInputString);
while (m.find()) {
    System.out.println(m.group(0));
} 
于 2013-05-18T16:36:10.640 回答
0

假设您的字符串如下所示,您可以使用下面的正则表达式来提取 www.google.com 和http://android.com

String s = "Hello dilip refer this url www.google.com. hi ramesh this is good for  android http://android.com";   
Pattern pc = Pattern.compile("((http://)|(www.))[A-Z,a-z]+.com");
Matcher matcher = pc.matcher(s);
while(matcher.find())
{
   System.out.println("String Extracted   "+matcher.group());
}

输出

String Extracted   www.google.com
String Extracted   http://android.com 

注意:以上不适用于这些类型的网址http://meta.stackoverflow.com、www.google.co.uk 和 b3ta.com。

编辑:

       String s = "Hello dilip refer www.google.co.uk www.google.co.in this url www.google.com. hi ramesh this is good for android http://android.com hello there meta.stackoverflow.com";   
       Pattern pc = Pattern.compile("((http://)|(www.))([A-Z,a-z,0-9])+((.com)|(.co.[a-z]{2}))|([A-Z,a-z,0-9].[A-Z,a-z,0-9])+.com");
       Matcher matcher = pc.matcher(s);
       while(matcher.find())
       {
          System.out.println("String Extracted   "+matcher.group());
       }

输出:

       String Extracted   www.google.co.uk
       String Extracted   www.google.co.in
       String Extracted   www.google.com
       String Extracted   http://android.com
       String Extracted   meta.stackoverflow.com

即使是上面的也不是完美的。但是,如果您可以修改上述正则表达式,它应该对您有所帮助

于 2013-05-18T14:31:35.243 回答