/** * URL转换为链接 * @author Boyer * @param urlText * @return String */ 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的内容,画面表示为链接 * @author Boyer * @param note * @return */ 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); }