Java 从SMS中提取URL

Java 从SMS中提取URL,java,android,url,sms,Java,Android,Url,Sms,我想要实现的是提取SMS中包含的所有URL。当我指的是全部时,我指的是所有可点击的文本,即短信中带下划线的文本。这是我正在尝试的代码,它可以工作,但只有当URL以http/https/ftp开头时。。。我还需要得到没有这个的URL public static List<String> extractUrls(String sms) { List<String> containedUrls = new ArrayList<String>(); S

我想要实现的是提取SMS中包含的所有URL。当我指的是全部时,我指的是所有可点击的文本,即短信中带下划线的文本。这是我正在尝试的代码,它可以工作,但只有当URL以http/https/ftp开头时。。。我还需要得到没有这个的URL

public static List<String> extractUrls(String sms) {
    List<String> containedUrls = new ArrayList<String>();
    String text = sms;

    // Split the sms to analyze if each part is a URL
    String[] split = text.split(" ");

    // Attempt to convert each item into an URL
    for (int i = 0; i < split.length; i++) {
        if (URLUtil.isValidUrl(split[i])) containedUrls.add(split[i]);
    }

    return containedUrls;
}
公共静态列表提取URL(字符串sms){
List containedUrls=new ArrayList();
字符串文本=短信;
//拆分短信以分析每个部分是否为URL
String[]split=text.split(“”);
//尝试将每个项目转换为URL
对于(int i=0;i
您可以尝试使用正则表达式

public static List<String> extractUrls(String sms) {
List<String> containedUrls = new ArrayList<String>();
String text = sms;

// Split the sms to analyze if each part is a URL
String[] split = text.split(" ");

Pattern p = Pattern.compile("(@)?(href=')?(HREF=')?(HREF=\")?(href=\")?(http://)?[a-zA-Z_0-9\\-]+(\\.\\w[a-zA-Z_0-9\\-]+)+(/[#&\\n\\-=?\\+\\%/\\.\\w]+)?");

// Attempt to convert each item into an URL
for (int i = 0; i < split.length; i++) {
    if (p.matcher(split[i]).matches()) containedUrls.add(split[i]);
}

return containedUrls;
}
公共静态列表提取URL(字符串sms){
List containedUrls=new ArrayList();
字符串文本=短信;
//拆分短信以分析每个部分是否为URL
String[]split=text.split(“”);
模式p=Pattern.compile(“(@)”(href=”)?(href=”)?(href=”)?(href=”)(http:/)?[a-zA-Z\u 0-9\\-]+(\\.\\w[a-zA-Z\u 0-9\-]+(/[\\\\\\\\\\\\\\\\%/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\%/\\\\\\\\\\\\\\\\\\\\;
//尝试将每个项目转换为URL
对于(int i=0;i