URL转换为链接,JAVA使用正则表达式把文本中的URL内容转换为链接

package com.example.es;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class AA {

    /**
     * URL转换为链接
     */
    public static String urlToLink(String urlText){
        // 匹配的条件选项为结束为空格(半角和全角)、换行符、字符串的结尾或者遇到其他格式的文本
        String regexp
                = "(((http|ftp|https|file)://)|((?<!((http|ftp|https|file)://))www\\.))"  // 以http...或www开头
                + ".*?"                                                                   // 中间为任意内容,惰性匹配
                + "(?=(&nbsp;|\\s| |<br />|$|[<>]))";                                     // 结束条件
        Pattern pattern = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(urlText);
        StringBuffer stringbuffer = new StringBuffer();
        while(matcher.find()){
            String url = matcher.group().substring(0, 3).equals("www") ? "http://" + matcher.group() : matcher.group();
            String tempString = "<a href=\"" + url + "\">" + matcher.group() + "</a>";
            // 这里对tempString中的"\"和"$"进行一次转义,因为下面对它替换的过程中appendReplacement将"\"和"$"作为特殊字符处理
            int tempLength = tempString.length();
            StringBuffer buffer = new StringBuffer();
            for(int i = 0; i < tempLength; ++i){
                char c = tempString.charAt(i);
                if(c == '\\' || c == '$'){
                    buffer.append("\\").append(c);
                } else {
                    buffer.append(c);
                }
            }
            tempString = buffer.toString();
            matcher.appendReplacement(stringbuffer, tempString);
        }
        matcher.appendTail(stringbuffer);
        return stringbuffer.toString();
    }

    /**
     * 文本中含有URL的内容,画面表示为链接
     */
    public static String textToLinks(String note) {
        // 转换的思想为把文本中不是链接("/a>"和"<a "之间)的内容逐个进行转换
        // 把字符串中的"\"和"$"加上转义符,避免appendReplacement替换字符串的时候将它们作为特殊字符处理
        int noteLength = note.length();
        StringBuffer buffer = new StringBuffer();
        for(int i = 0; i < noteLength; ++i){
            char c = note.charAt(i);
            if(c == '\\' || c == '$'){
                buffer.append("\\").append(c);
            } else {
                buffer.append(c);
            }
        }
        String linkNote = "/a>" + buffer.toString() + "<a ";
        String regexp = "(?<=/a>).*?(?=<a )";
        Pattern pattern = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(linkNote);
        StringBuffer stringbuffer = new StringBuffer();
        while(matcher.find()){
            String tempString = urlToLink(matcher.group());
            matcher.appendReplacement(stringbuffer, tempString);
        }
        matcher.appendTail(stringbuffer);
        String result = stringbuffer.toString();
        // 返回的结果去掉加入的"/a>" 和"<a "
        return result.substring(3, result.length() - 3);
    }





    public static String regexURL(String str) {
        String regex = "((http|ftp|https)://)?"
                + "(([a-zA-Z0-9\\._-]+\\."
                + "[a-zA-Z]{2,6})|([0-9]{1,3}\\.[0-9]{1,3}\\."
                + "[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,4})*(/[a-zA-Z0-9\\&%_\\./-~-]*)?";

        Pattern imgPattern = Pattern.compile(regex);
        Matcher imgMatcher = imgPattern.matcher(str);
        while (imgMatcher.find()) {
            if (!"PNG,JPG,GIF,JPEG,BMP".contains(imgMatcher.group().substring(imgMatcher.group().lastIndexOf(".") + 1).toUpperCase())) {//排除内容中的表情或者图片
                String end = "</a>";
                if (null != imgMatcher.group() && !imgMatcher.group().startsWith("http")) {
                    String url = imgMatcher.group();
                    String before = "<a href='" + url + "'>";
                    str = str.replace(url, before + url + end);
                } else {
                    String url = imgMatcher.group();
                    String before = "<a href='" + url + "'>";
                    str = str.replace(url, before + url + end);
                }
            }
        }
        return str;
    }




    public static void main(String[] args) {
        String text = "请访问https://www.baidu.com/dsdsad/dsad weee和http://www.google.com/?name=xxx";
        String textToLinks = AA.textToLinks(text);
        String urlToLink = AA.urlToLink(text);
        String regexURL = AA.regexURL(text);
        System.out.println(textToLinks);
        System.out.println(urlToLink);
        System.out.println(regexURL);
    }




}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风小筝123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值