有如下一段文本需要在Android设备上显示
沁园春·雪<br>头州游3×5=15<br>最的采分析<p>和论证,技术标</p>准和规范的应出给<a href="http://www.baidu.com">This is a link</a>。光刑句括:9Fs>1、出纷言有弹性:9Fs<1、进给缺三弹性:aF<=1、进给单份弹性:AFs=月,进。
分析其特点如下:
1、包含有html转义字符:· 和 ×
2、包含html标签:<br>、<p>、<a href="http://www.baidu.com">、</a>
3、含有小于号:<、<=
正常加载肯定是不行的转义字符、html标签直接显示都是不合适的,如图:
以HTML的格式加载会出现小于号后面的内容被截断,显示不全的问题,如下图:
如果能单独对小于号(<)转义一下是不是就可以解决这个问题了,首先需要确认如何从一段html中匹配出单独的小于号(不包括html标签起始)。使用正则表达式在线测试工具验证
具体代码实现:
/**
* 1、将小于号转化成 <
* @param content
*/
fun converterHtmlStr(content: String): CharSequence {
var temp = content
if (TextUtils.isEmpty(content)) {
return ""
}
// 1、将小于号转化成 <
if (temp.contains("<")) {
temp = temp.replace("<(?![a-zA-Z 0-9""=;:._#-?/]+>)".toRegex(), "<")
}
return HtmlCompat.fromHtml(temp, HtmlCompat.FROM_HTML_MODE_LEGACY)
}
//调用
tvContent.text = converterHtmlStr(htmlStr)
效果:
注:正则表达式的语法可以参考 正则表达式 – 语法 | 菜鸟教程
此处我们使用的如下格式的正则(查找后面不是html标签后半段的小于号):