使用模式替换Android字符串

时间:2019-05-24 15:20:39

标签: android regex string kotlin pattern-matching

当我尝试搜索和替换字符串时,我的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}

有什么主意吗?

谢谢

1 个答案:

答案 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