如何从Android中的文本中提取所有URL

时间:2019-05-08 07:33:44

标签: java android regex

我想使用Patterns.WEB_URL.matcher(qrText);

从给定的文本中获取所有URL。

我想做什么:

我正在扫描QR码

  • 如果链接包含包含单词“ veridoc”的链接,请在webView中打开该链接
  • 如果所扫描的文本不是链接或不包含单词“ veridoc”的其他链接,则在textView中显示

我尝试过的事情:

private void initialize() {
    if (getIntent().getStringExtra(Constants.KEY_LINK) != null) {
        qrText = getIntent().getStringExtra(Constants.KEY_LINK);
        webMatcher = Patterns.WEB_URL.matcher(qrText);
    }

    if (qrText.contains("veridoc") && webMatcher.matches()) {
            //if qr text is veridoc link
            Log.e("veridoc link", qrText);
            setupWebView(qrText, false);
        } else if (webMatcher.matches()) {
            //if qr text is link other than veridoc
            Log.e("link", qrText);
            openInBrowser(qrText);
            finish();
        } else if  (qrText.contains("veridoc") && webMatcher.find()) {
            //if qrText contains veridoc link + other text.
            String url = webMatcher.group();

            if (url.contains("veridoc")) {
                Log.e("veridoc link found", url);
                setupWebView(url, true);
            } else
                showQRText(qrText);
        } else {
            //the qrText neither is a link nor contains any link that contains word veridoc
            showQRText(qrText);
        }
    } 
}

在上面的代码中,

  • setupWebView(String strUrl, boolean isTextAndUrlBoth)设置网络视图并加载网址等。

  • openInBrowser(String url)在浏览器中打开提供的URL。

  • showQRText(String text)在textView中以格式显示提供的文本。

问题

当文本包含一些文本并且具有多个链接时,String url = webMatcher.group();总是获取文本中的第一个链接。

我想要的

我想要文本中的所有链接,并找出哪些链接包含单词“ veridoc”。之后,我想调用方法setupWebView(url, true);

我正在使用以下链接和示例文字

名称:东西 职业:某事 链接1:https://medium.com/@rkdaftary/understanding-git-for-beginners-20d4b55cc72c 链接2:https://my.veridocglobal.com/login 谁能帮助我找到文本中显示的所有链接?

1 个答案:

答案 0 :(得分:1)

您可以循环查找,以找到其他网站并设置阵列列表

Matcher webMatcher = Patterns.WEB_URL.matcher(input);
ArrayList<String> veridocLinks = new arrayList<>();
ArrayList<String> otherLinks = new arrayList<>();

while (webMatcher.find()){
    String res = webMatcher.group();
    if(res!= null) {
        if(res.contains("veridoc")) veridocLinks.add(res);
        else otherLinks.add(res);
    }
}

给出如下示例输入:

String input = "http://www.veridoc.com/1 some text http://www.veridoc.com/2 some other text http://www.othersite.com/3";

您的ArrayList将包含:

veridocLinks : "http://www.veridoc.com/1", "http://www.veridoc.com/2"
otherLinks : "http://www.othersite.com/3"