当我尝试搜索和替换字符串时,我的android应用程序当前遇到问题。
我收到一个包含关键字${keyword}
的句子,就像Today we are ${keyword} and it is beautiful
一样,我必须解析它并用特定的字符串替换${keyword}
下面是我的代码:
const val PATTERN_TO_FIND = "\${keyword}"
private val keywordRegex = Regex(ContentfulTranslations.PATTERN_TO_FIND)
fun replaceMyKeyword(sentence: String): String{
return sentence.replace(keywordRegex, "blabla")
}
分析句子并查找模式时,应用程序不断崩溃。
我已经使用了这种方法,它曾经可以工作,但是查找的模式未格式化为${keyword}
有什么主意吗?
谢谢
答案 0 :(得分:2)
崩溃的原因是花括号在regexp中是保留字符,表示一个范围,因此您需要对它们进行转义(至少是开头的转义)。
此外,\$
会在正则表达式的开头放置一个文字$
,但是美元符号表示要匹配的字符串的结尾,因此您也需要“ regexp-escape”。最终结果将是:
const val PATTERN_TO_FIND = "\\\$\\{keyword}"
幸运的是,Pattern
类提供了一种实用程序方法来自动转义正则表达式:
val pattern = Pattern.quote("\${keyword}")
请注意,您仍然需要转义美元符号,因为它在Kotlin中具有特殊含义。
完整的示例:
fun main() {
val s = "Today we are \${keyword} and it is beautiful"
val pattern = Pattern.quote("\${keyword}")
val keywordRegex = Regex(pattern)
println(s.replace(keywordRegex, "blabla"))
}
将打印:
Today we are blabla and it is beautiful