android汉字转url,Android将文本中的URL转换为超链接工具类(原文本有超链接标签也适用)...

本文介绍了一个名为TextToLinkUtil的Java类,它将文本中的URL转换为链接,同时通过正则表达式进一步识别并整合文本中的其他链接。该工具特别关注从HTML字符串中提取和处理URL,并能处理多种链接格式和协议。
摘要由CSDN通过智能技术生成

public class TextToLinkUtil {

public static String textContainUrlToLink(String urlText) {

// 先拆分原字符串的超链接和文本

Spanned spanned = Html.fromHtml(urlText);

SpannableStringBuilder builder = new SpannableStringBuilder(spanned);

URLSpan[] spans = builder.getSpans(0, builder.length(), URLSpan.class);

String newUrlText = builder.toString();

ArrayList list = new ArrayList<>();

if (spans != null) {

int index = 0;

for (URLSpan urlSpan : spans) {

int start = builder.getSpanStart(urlSpan);

int end = builder.getSpanEnd(urlSpan);

if (start >= 0 && end >= 0) {

if(start <= newUrlText.length()) {

list.add(newUrlText.substring(index, start));

}

if(end <= newUrlText.length()) {

list.add(new TextUrlSpan(newUrlText.substring(start, end), urlSpan.getURL()));

}

index = end;

}

}

if(index >= 0) {

list.add(newUrlText.substring(index, newUrlText.length()));

}

} else {

list.add(newUrlText);

}

//再用正则表达式匹配文本中的链接,最后把超链接和匹配到的链接文本合并

// url的正则表达式

String regexp = "((http[s]{0,1})://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)"; // 结束条件

Pattern pattern = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE);

String newStr = "";

for (int i = 0; i < list.size(); i++) {

if (list.get(i) instanceof String) {

String str = (String) list.get(i);

Matcher matcher = pattern.matcher(str);

String resultText = "";// (临时变量,保存转换后的文本)

int lastEnd = 0;// 保存每个链接最后一会的下标

while (matcher.find()) {

if (lastEnd >=0 && matcher.start() >=0 && matcher.start() <= str.length()) {

resultText += str.substring(lastEnd, matcher.start());

}

String url = matcher.group();

//匹配到没有协议的链接,默认使用http

if(!url.startsWith("http") && !url.startsWith("https")) {

url = "http://" + url;

}

resultText += "" + url + "";

lastEnd = matcher.end();

}

if(lastEnd >= 0) {

resultText += str.substring(lastEnd);

}

newStr += resultText;

} else if (list.get(i) instanceof TextUrlSpan) {

TextUrlSpan urlSpan = (TextUrlSpan) list.get(i);

String url = urlSpan.getURL();

//匹配到没有协议的链接,默认使用http

if(!url.startsWith("http") && !url.startsWith("https")) {

url = "http://" + url;

}

newStr += "" + urlSpan.getText() + "";

}

}

return newStr;

}

private static class TextUrlSpan extends URLSpan {

private String text;

public String getText() {

return text;

}

public TextUrlSpan(String text, String url) {

super(url);

this.text = text;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值