Swift中是否存在startsAnd()方法或类似的东西?
我基本上是想检查某个字符串是否以另一个字符串开始。我也希望它不区分大小写。
正如你可能知道的,我只是想做一个简单的搜索功能,但我似乎在这方面失败得很惨。
这是我想要的:
输入“sa”应该会给出“圣安东尼奥”、“圣达菲”等的结果。输入“sa”或“sa”甚至“sa”也应该返回“圣安东尼奥”或“圣达菲”。
我当时在用
self.rangeOfString(find, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil
在iOS9之前,它工作得很好。然而,升级到iOS9后,它停止工作,现在搜索区分大小写。
var city = "San Antonio"
var searchString = "san "
if(city.rangeOfString(searchString, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil){
print("San Antonio starts with san ");
}
var myString = "Just a string with san within it"
if(myString.rangeOfString(searchString, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil){
print("I don't want this string to print bc myString does not start with san ");
}
使用hasPrefix
而不是startsFor
。
例子:
"hello dolly".hasPrefix("hello") // This will return true
"hello dolly".hasPrefix("abc") // This will return false
下面是startsWith的快速扩展实现:
extension String {
func startsWith(string: String) -> Bool {
guard let range = rangeOfString(string, options:[.AnchoredSearch, .CaseInsensitiveSearch]) else {
return false
}
return range.startIndex == startIndex
}
}
用法示例:
var str = "Hello, playground"
let matches = str.startsWith("hello") //true
let no_matches = str.startsWith("playground") //false
要回答不区分大小写的前缀匹配问题,请执行以下操作:
extension String {
func caseInsensitiveHasPrefix(_ prefix: String) -> Bool {
return lowercased().hasPrefix(prefix.lowercased())
}
}
或:
extension String {
func caseInsensitiveHasPrefix(_ prefix: String) -> Bool {
return lowercased().starts(with: prefix.lowercased())
}
}
注意:对于空前缀“
两种实现都将返回true
extension String {
func caseInsensitiveHasPrefix(_ prefix: String) -> Bool {
return range(of: prefix, options: [.anchored, .caseInsensitive]) != nil
}
}
注意:对于空前缀“
它将返回false
extension String {
func caseInsensitiveHasPrefix(_ prefix: String) -> Bool {
guard let expression = try? NSRegularExpression(pattern: "\(prefix)", options: [.caseInsensitive, .ignoreMetacharacters]) else {
return false
}
return expression.firstMatch(in: self, options: .anchored, range: NSRange(location: 0, length: characters.count)) != nil
}
}
注意:对于空前缀“
它将返回false