首页 > 解决方案 > Android字符串替换使用模式

问题描述

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

任何想法?

谢谢

标签: androidregexstringkotlinpattern-matching

解决方案


它崩溃的原因是花括号是正则表达式中表示范围的保留字符,因此您需要转义它们(或至少是开头的)。此外,\$将在您的正则表达式的开头放置一个文字$符号,但美元符号表示要匹配的字符串的结尾,因此您还需要“regexp-escape”它。最终结果将是:

const val PATTERN_TO_FIND = "\\\$\\{keyword}"

幸运的是,Patternclass 提供了一个实用方法来自动转义正则表达式:

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

推荐阅读