目标:具有内置分隔符的字符串应拆分为一个 int 和另一个字符串。如果分隔符序列'###'出现多次,则字符串应始终拼接在最后一个'###'。
是否有类似 C# 中的 string.lastIndexOf("###") 之类的运算符?
这就是我的解析器的样子:
func parseTuple(from string: String) -> (String, Int)? {
let parsedString = string.components(separatedBy: "###")
if let tupleString = String(parsedString[0]), let tupleInt = Int(parsedString[1]) {
return (tupleString, tupleInt)
} else {
return nil
}
}
The range(of:...) https://developer.apple.com/documentation/swift/string/1642786-range的方法String
has a .backwards
选项
查找字符串的最后一次出现。
然后substring(to:)
and substring(from:)
可以与
用于提取字符串部分的范围的下限/上限
分隔符之前/之后:
func parseTuple(from string: String) -> (String, Int)? {
if let theRange = string.range(of: "###", options: .backwards),
let i = Int(string.substring(from: theRange.upperBound)) {
return (string.substring(to: theRange.lowerBound), i)
} else {
return nil
}
}
Example:
if let tuple = parseTuple(from: "Connect###Four###Player###7") {
print(tuple)
// ("Connect###Four###Player", 7)
}
斯威夫特 4 更新:
func parseTuple(from string: String) -> (String, Int)? {
if let theRange = string.range(of: "###", options: .backwards),
let i = Int(string[theRange.upperBound...]) {
return (String(string[...theRange.lowerBound]), i)
} else {
return nil
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)