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开头
+ ".*?" // 中间为任意内容,惰性匹配
+ "(?=( |\\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);
}
}
URL转换为链接,JAVA使用正则表达式把文本中的URL内容转换为链接
最新推荐文章于 2024-06-27 08:08:06 发布