android - 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}
任何想法?
谢谢
解决方案
它崩溃的原因是花括号是正则表达式中表示范围的保留字符,因此您需要转义它们(或至少是开头的)。此外,\$
将在您的正则表达式的开头放置一个文字$
符号,但美元符号表示要匹配的字符串的结尾,因此您还需要“regexp-escape”它。最终结果将是:
const val PATTERN_TO_FIND = "\\\$\\{keyword}"
幸运的是,Pattern
class 提供了一个实用方法来自动转义正则表达式:
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
推荐阅读
- excel - Excel说文件被“另一个用户”锁定并在打开时删除宏
- perl - 是否有当前核心 Perl 5 版本(例如 5.34)的 PDF 文档?
- vagrant - vagrant ssh 的问题:终止,1 个错误的配置选项
- reactjs - React JS 类组件 const = 具有多个条件
- latex - LaTeX:如何定义带有特殊字符的路径?
- postgresql - 卸载 Postgres
- javascript - rails 6 easyautocomplete Uncaught TypeError: listData is undefined
- asp.net - 使用 PowerShell 命令在 system.web/httpRuntime 中配置 maxRequestLength 参数
- reactjs - 有没有办法避免在 React 中有两个“根”元素?
- asp.net - 会话状态以秒为单位超时,而不是分钟