所以我正在做一个社交网络作为一个副项目,我遇到了以下问题:当提到两个名字相同的不同用户时,我无法区分他们彼此。下面是我正在做的:
fun String.transformMentionForBackend(mentions: List<Mention>): String {
var result = this
if (mentions.isNotEmpty()) {
for (mention in mentions.distinctBy{ Pair(it.id, it.name) }) {
result = result.replace(mention.name, getMentionTag(mention.id, mention.name))
}
}
return result
}
private fun getMentionTag(id: Int, name: String): String {
return "<mention id="$id">@$name</mention>"
}
这工作得很好,直到我想在同一篇文章或评论中提到我的叔叔John Smith(id: 100, name: John Smith)
和我的室友John Smith(id:200, name: John Smith)
,因为replace()
取代了mention.name
的所有出现。我想使用replaceFirst()
或replaceLast()
,但它只会把标签两次分别放在名字或姓氏上。我试着阅读关于字符串的文档,但没有找到任何有用的东西。解决这个问题的最好方法是什么?
从对这个问题的评论中,我意识到我需要一些别的东西来区分两个名字相同的不同提及。
我最后做的是一个for循环,它通过列表id(0,1,2等)迭代提及列表,只有在第一次匹配时,它才用完整的标记替换名称。
确实感觉有点粗糙,但我真的想不出其他的东西。