Android平台Kotlin语言中如何反转义已转义字符串?
Android中已转义字符串的反转义方法
在Android开发场景下,Regex.escape()仅提供字符串转义能力,并无内置反转义函数,以下是两种可行的实现方案:
方法一:自定义正则替换实现反转义
Regex.escape()的核心逻辑是对正则特殊字符(如., *, +, ?, [], ()等)添加反斜杠转义,反转义只需将这些被转义的字符还原即可。
Kotlin 实现代码
fun String.unescapeRegex(): String { // 匹配被转义的正则特殊字符,将\X替换为原字符X return this.replace(Regex("\\\\([\\Q.*+?^${}()|[]\\E\\\\])"), "$1") } // 使用示例 fun main() { val originalStr = "demo.*+?[]()" val escapedStr = Regex.escape(originalStr) println("转义后:$escapedStr") // 输出 demo\.\*\+\?\[\]\(\) val unescapedStr = escapedStr.unescapeRegex() println("反转义后:$unescapedStr") // 输出 demo.*+?[]() }
代码说明
- 正则中的
\\Q和\\E用于包裹正则特殊字符,避免它们被解析为正则语法; - 捕获组
$1提取被反斜杠转义的原字符,完成反转义操作。
方法二:借助Apache Commons Lang工具类
如果项目已引入Apache Commons Lang库,可直接使用现成工具方法处理,它能兼容多种转义场景:
引入依赖(Module级build.gradle)
implementation 'org.apache.commons:commons-lang3:3.14.0'
使用示例
import org.apache.commons.lang3.StringEscapeUtils fun main() { val escapedStr = Regex.escape("test^$|") val unescapedStr = StringEscapeUtils.unescapeJava(escapedStr) println(unescapedStr) // 输出 test^$| }
注意事项
- 若转义字符串包含自定义转义规则(非正则相关),需根据实际场景调整反转义逻辑;
- 确保反转义规则与
Regex.escape()的转义逻辑完全匹配,避免还原错误。
内容的提问来源于stack exchange,提问作者Abdullah Omer
相关产品推荐
相关产品推荐

