我有一个字符串,这个字符串不断变化。
我抓住了我的一部分字符串,在代码中可以将其称为let mySub = "xyz"
原始字符串随时间变化,因此不用担心我如何获得mySub
,在这个示例中,我们可以说字符串为let baseString = 123123xyz1234
在没有xyz
的情况下,如何能够在没有硬编码的情况下捕获所有子字符串,所以xyz
的位置可以不同并且子字符串捕获仍然可以正常进行?
答案 0 :(得分:1)
您可以在mySub
中找到baseString
的第一个匹配范围,如果找到,则获取上一部分。
let baseString: String = "123123xyz1234"
let mySub = "xyz"
if let range = baseString.range(of: mySub) {
let beforeStr = baseString[..<range.lowerBound]
}
答案 1 :(得分:0)
您可以获取子字符串范围的下限索引,并将子字符串向上扩展至该索引。如果您想对变音符号不区分大小写进行区分大小写,则可以使用localizedStandardRange:
extension StringProtocol {
func substring<S: StringProtocol>(upTo string: S, options: String.CompareOptions = []) -> SubSequence? {
guard let lower = range(of: string, options: options)?.lowerBound
else { return nil }
return self[..<lower]
}
func localizedStandardSubstring<S: StringProtocol>(upTo string: S, options: String.CompareOptions = []) -> SubSequence? {
guard let lower = localizedStandardRange(of: string)?.lowerBound
else { return nil }
return self[..<lower]
}
}
let string = "123123xyz1234"
if let substring = string.substring(upTo: "xyz") {
print(substring) // "123123\n"
}
let localized = "123123café1234"
if let substring = localized.localizedStandardSubstring(upTo: "CAFE") {
print(substring) // "123123\n"
}