gpt4 book ai didi

ios - Swift 获取字符串中最后一次出现字符后的子字符串

转载 作者:行者123 更新时间:2023-12-03 08:21:01 30 4
gpt4 key购买 nike

我正在创建一个帖子上传页面,需要检测用户何时键入“@”符号,以便它可以在数据库中搜索用户名。我的代码适用于字符串中的第一个“@”,但不适用于任何其他“@”。我希望用户能够标记任意数量的用户名。例如:嘿@John,你今天和@Jim 聊过吗?

这就是我正在寻找的内容,但它已经过时了: How to get substring after last occurrence of character in string: Swift IOS

当前代码:

var afterEqualsTo = ""
if let index = text.range(of: "@")?.upperBound {
let afterEqualsTo = String(text.suffix(from: index))
print(afterEqualsTo)
}

最佳答案

您可以使用双向集合方法lastIndex(of: Element)并从那里获取子字符串并删除第一个字符:

var text = "Hello, playground! Hello World!!!"
var afterEqualsTo = ""
if let index = text.lastIndex(of: " ") {
let afterEqualsTo = String(text.suffix(from: index).dropFirst())
print(afterEqualsTo)
}

另一种选择是在使用上面尝试过的字符串范围时向后使用选项:

var text = "Hello, playground! Hello World!!!"
var afterEqualsTo = ""
if let index = text.range(of: " ", options: .backwards)?.upperBound {
let afterEqualsTo = String(text.suffix(from: index))
print(afterEqualsTo) // "World!!!\n"
}

如果您想获取字符串中的所有用户,您应该使用像 "@\w+\b" 这样的正则表达式并迭代整个字符串。如果您想从结果中排除字符 @,您可以使用正向回顾模式,例如 "(?<=@)\w+\b"

var text = "Hey @John did you talk to @Jim today?"
var ranges: [Range<String.Index>] = []
var start = text.startIndex
let pattern = #"@\w+\b"#
while start < text.endIndex,
let range = text[start...].range(of: pattern, options: .regularExpression) {
ranges.append(range)
start = text.index(range.upperBound, offsetBy: 1, limitedBy: text.endIndex) ?? text.endIndex
}

let users = ranges.map { text[$0] }
users // ["@John", "@Jim"]

或使用正向回顾模式 "(?<=@)\w+\b"

users  // ["John", "Jim"]

关于ios - Swift 获取字符串中最后一次出现字符后的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67828863/

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