gpt4 book ai didi

android - Kotlin 检查字符串中的单词

转载 作者:行者123 更新时间:2023-12-02 12:18:00 27 4
gpt4 key购买 nike

我有一个 NSFW 类,可以根据已知 NSFW 单词列表扫描项目名称和描述等文本。

这将是测试字符串列表的最佳方法,例如

    let nsfw = listof(
"badword",
"curseword",
"ass",
... 200+ more
)

针对如下字符串:
This is the text that contains a badword // returns true

请注意,我需要检查完整的单词。不是单词的一部分。

所以这句话:
The grass is grean // returns false

因为草不是一个坏词。

我试过这样的东西,但它不检查完整的单词。
        val result =  nsfw.filter { it in sentence.toLowerCase() }

最佳答案

您可以构建一个正则表达式

\b(?:word1|word2|word3...)\b

the regex demo .然后,将其与 Regex.containsMatchIn method 一起使用:
val nsfw = listOf(
"badword",
"curseword",
"ass"
)
val s1 = "This is the text that contains a badword"
val s2 = "The grass is grean"
val rx = Regex("\\b(?:${nsfw.joinToString(separator="|")})\\b")
println(rx.containsMatchIn(s1)) // => true
println(rx.containsMatchIn(s2)) // => false

this Kotlin demo .

在这里, nsfw.joinToString(separator="|")用管道(交替运算符)和 "\\b(?:${nsfw.joinToString(separator="|")})\\b" 连接单词创建正确的正则表达式。

如果您的文字可能包含特殊的正则表达式元字符,例如 + , ? , ( , )等,您需要“预处理” nsfw Regex.escape method 的值:
val rx = Regex("\\b(?:${nsfw.map{Regex.escape(it)}.joinToString("|")})\\b")
^^^^^^^^^^^^^^^^^^^^^^

the Kotlin demo .

还有一件事:如果关键字可能以字母、数字和下划线以外的字符开头/结尾,则不能依赖 \b词边界。您可以
  • 使用空白边界:val rx = Regex("(?<!\\S)(?:${nsfw.map{Regex.escape(it)}.joinToString("|")})(?!\\S)")
  • 使用明确的单词边界:val rx = Regex("(?<!\\w)(?:${nsfw.map{Regex.escape(it)}.joinToString("|")})(?!\\w)")
  • 关于android - Kotlin 检查字符串中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55748235/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com