在Objective-C中,检查NSString子字符串的代码是:
NSString *string = @"hello Swift";
NSRange textRange =[string rangeOfString:@"Swift"];
if(textRange.location != NSNotFound)
{
NSLog(@"exists");
}
但是如何在Swift中做到这一点呢?
在Objective-C中,检查NSString子字符串的代码是:
NSString *string = @"hello Swift";
NSRange textRange =[string rangeOfString:@"Swift"];
if(textRange.location != NSNotFound)
{
NSLog(@"exists");
}
但是如何在Swift中做到这一点呢?
当前回答
另一个。支持大小写和变音符。
斯威夫特3.0
struct MyString {
static func contains(_ text: String, substring: String,
ignoreCase: Bool = true,
ignoreDiacritic: Bool = true) -> Bool {
var options = NSString.CompareOptions()
if ignoreCase { _ = options.insert(NSString.CompareOptions.caseInsensitive) }
if ignoreDiacritic { _ = options.insert(NSString.CompareOptions.diacriticInsensitive) }
return text.range(of: substring, options: options) != nil
}
}
使用
MyString.contains("Niels Bohr", substring: "Bohr") // true
iOS 9 +
iOS 9开始提供大小写和变音符不敏感功能。
if #available(iOS 9.0, *) {
"Für Elise".localizedStandardContains("fur") // true
}
其他回答
如果你想检查一个字符串中是否包含另一个子字符串,你也可以这样检查,
var name = String()
name = "John has two apples."
现在,在这个特定的字符串中,如果你想知道它是否包含名为apple的水果,你可以这样做,
if name.contains("apple") {
print("Yes , it contains fruit name")
} else {
print("it does not contain any fruit name")
}
希望这对你有用。
Swift 3:在这里你可以看到我的智能搜索扩展从字符串,让你对字符串进行搜索,看看它是否包含,或者可能过滤一个基于搜索文本的集合。
https://github.com/magonicolas/Swift-Smart-String-Search
您不需要为此编写任何定制代码。从1.2版本开始,Swift已经有了所有你需要的方法:
获取字符串长度:count(string); 检查字符串是否包含子字符串:contains(字符串,子字符串); 检查字符串是否以substring开头:startsWith(string, substring) 等。
这是我在快速操场上的第一次尝试。 我通过提供两个新函数(contains和containsIgnoreCase)来扩展String
extension String {
func contains(other: String) -> Bool{
var start = startIndex
do{
var subString = self[Range(start: start++, end: endIndex)]
if subString.hasPrefix(other){
return true
}
}while start != endIndex
return false
}
func containsIgnoreCase(other: String) -> Bool{
var start = startIndex
do{
var subString = self[Range(start: start++, end: endIndex)].lowercaseString
if subString.hasPrefix(other.lowercaseString){
return true
}
}while start != endIndex
return false
}
}
像这样使用它
var sentence = "This is a test sentence"
sentence.contains("this") //returns false
sentence.contains("This") //returns true
sentence.containsIgnoreCase("this") //returns true
"This is another test sentence".contains(" test ") //returns true
我欢迎任何反馈:)
扩展的方法
斯威夫特4
extension String {
func contains(find: String) -> Bool{
return self.range(of: find) != nil
}
func containsIgnoringCase(find: String) -> Bool{
return self.range(of: find, options: .caseInsensitive) != nil
}
}
var value = "Hello world"
print(value.contains("Hello")) // true
print(value.contains("bo")) // false
print(value.containsIgnoringCase(find: "hello")) // true
print(value.containsIgnoringCase(find: "Hello")) // true
print(value.containsIgnoringCase(find: "bo")) // false
通常Swift 4有包含方法,但它可从iOS 8.0+
斯威夫特3.1
你可以为字符串写扩展contains:和containsIgnoringCase
extension String {
func contains(_ find: String) -> Bool{
return self.range(of: find) != nil
}
func containsIgnoringCase(_ find: String) -> Bool{
return self.range(of: find, options: .caseInsensitive) != nil
}
}
旧Swift版本
extension String {
func contains(find: String) -> Bool{
return self.rangeOfString(find) != nil
}
func containsIgnoringCase(find: String) -> Bool{
return self.rangeOfString(find, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil
}
}
例子:
var value = "Hello world"
print(value.contains("Hello")) // true
print(value.contains("bo")) // false
print(value.containsIgnoringCase("hello")) // true
print(value.containsIgnoringCase("Hello")) // true
print(value.containsIgnoringCase("bo")) // false