将 slice from string to string 函数修改为 return last index if to string not found
Modify slice from string to string function to return last index if to string not found
我有一个切片函数 。我想知道如何修改它,以便如果找不到 to
字符串,但找到 from
它将 return 整个字符串的结束索引(.count-1
).现在,如果我调用 .slice
并且没有找到 to
字符串,它显然会崩溃。
extension String {
func slice(from: String, to: String) -> String? {
return (range(of: from)?.upperBound).flatMap { substringFrom in
(range(of: to, range: substringFrom..<endIndex)?.lowerBound).map { substringTo in
String(self[substringFrom..<substringTo])
}
}
}
}
这是一种可能的解决方案:
extension String {
func slice(from: String, to: String) -> String? {
if let fromRng = range(of: from) {
if let toRng = range(of: to, range: fromRng.upperBound..<endIndex) {
// "from" and "to" found, get parts between
return String(self[fromRng.upperBound..<toRng.lowerBound])
} else {
// "to" not found, return everything after "from"
return String(self[fromRng.upperBound...])
}
} else {
// "from" not found
return nil
}
}
}
它不像原来的那样"fancy",但我个人认为逻辑更容易阅读。
我有一个切片函数 to
字符串,但找到 from
它将 return 整个字符串的结束索引(.count-1
).现在,如果我调用 .slice
并且没有找到 to
字符串,它显然会崩溃。
extension String {
func slice(from: String, to: String) -> String? {
return (range(of: from)?.upperBound).flatMap { substringFrom in
(range(of: to, range: substringFrom..<endIndex)?.lowerBound).map { substringTo in
String(self[substringFrom..<substringTo])
}
}
}
}
这是一种可能的解决方案:
extension String {
func slice(from: String, to: String) -> String? {
if let fromRng = range(of: from) {
if let toRng = range(of: to, range: fromRng.upperBound..<endIndex) {
// "from" and "to" found, get parts between
return String(self[fromRng.upperBound..<toRng.lowerBound])
} else {
// "to" not found, return everything after "from"
return String(self[fromRng.upperBound...])
}
} else {
// "from" not found
return nil
}
}
}
它不像原来的那样"fancy",但我个人认为逻辑更容易阅读。