在Objective-C
中,检查一个NSString
中是否包含子字符串的代码是:
NSString *string = @"hello Swift";
NSRange textRange =[string rangeOfString:@"Swift"];
if(textRange.location != NSNotFound)
{
NSLog(@"exists");
}
但是我怎么在Swift中做到这一点呢?
在Swift 4中,String是Character值的集合,而在Swift 2和3中并非如此,因此您可以使用这个更简洁的代码1:
let string = "hello Swift"
if string.contains("Swift") {
print("exists")
}
var string = "hello Swift"
if string.range(of:"Swift") != nil {
print("exists")
}
// alternative: not case sensitive
if string.lowercased().range(of:"swift") != nil {
print("exists")
}
var string = "hello Swift"
if string.rangeOfString("Swift") != nil{
println("exists")
}
// alternative: not case sensitive
if string.lowercaseString.rangeOfString("swift") != nil {
println("exists")
}
containsString()
时遇到了一些奇怪的问题。1
附注:不要忘记 import Foundation
{NSNotFound, 0}
,则会自动将其表示为nil。 如果它是一个实际范围,则会将其表示为Swift Range(可选)。很酷。 - mattNSString
的 .rangeOfString()
方法。这是调用 String
的 .rangeOfString()
方法,声明如下:func rangeOfString(aString: String, options mask: NSStringCompareOptions = default, range searchRange: Range<Index>? = default, locale: NSLocale? = default) -> Range<Index>?
。 - newacctextension 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有contains方法,但它只能在iOS 8.0及以上版本中使用。
你可以为String
编写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
}
}
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
Foundation
,否则不再需要此操作... containsString
的效果很好。 - Dan Rosenstarkfunc contains(find: String) -> Bool{
return self.range(of: find) != nil
}
func containsIgnoringCase(find: String) -> Bool{
return self.range(of: find, options: .caseInsensitive) != nil
}
} - shokaveli根据文档,调用 containsString()
应该可以在字符串上工作:
Swift的String类型与Foundation的NSString类无缝桥接。如果您正在使用Cocoa或Cocoa Touch的Foundation框架,则可以调用任何创建的String值上的整个NSString API,以及本章描述的String特性。您还可以将String值与需要NSString实例的任何API一起使用。
然而,它似乎并不是这样工作的。
如果您尝试使用someString.containsString(anotherString)
,则会出现编译时错误,指出'String' does not contain a member named 'containsString'
。
因此,您有几个选项,其中一个是通过使用bridgeToObjectiveC()
显式将您的String
桥接到Objective-C,其他两个涉及显式使用NSString
,最后一个涉及将String
转换为NSString
。
通过桥接,您将得到:
var string = "hello Swift"
if string.bridgeToObjectiveC().containsString("Swift") {
println("YES")
}
通过将字符串明确地声明为 NSString
,你会得到:
var string: NSString = "hello Swift"
if string.containsString("Swift") {
println("YES")
}
如果您已经有一个现有的String
,您可以使用NSString(string:)来初始化一个NSString:
var string = "hello Swift"
if NSString(string: string).containsString("Swift") {
println("YES")
}
最后,你可以将现有的String
强制转换为NSString
如下:
var string = "hello Swift"
if (string as NSString).containsString("Swift") {
println("YES")
}
另一个。支持大小写和发音符选项。
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已经提供了不区分大小写和音标的函数。
if #available(iOS 9.0, *) {
"Für Elise".localizedStandardContains("fur") // true
}
在Xcode 7.1和Swift 2.1中,containsString()
对我来说工作得很好。
let string = "hello swift"
if string.containsString("swift") {
print("found swift")
}
Swift 4:
let string = "hello swift"
if string.contains("swift") {
print("found swift")
}
这是一个不区分大小写的 Swift 4 示例:
let string = "Hello Swift"
if string.lowercased().contains("swift") {
print("found swift")
}
或者使用不区分大小写的 String
扩展:
extension String {
func containsIgnoreCase(_ string: String) -> Bool {
return self.lowercased().contains(string.lowercased())
}
}
let string = "Hello Swift"
let stringToFind = "SWIFT"
if string.containsIgnoreCase(stringToFind) {
print("found: \(stringToFind)") // found: SWIFT
}
print("string: \(string)")
print("stringToFind: \(stringToFind)")
// console output:
found: SWIFT
string: Hello Swift
stringToFind: SWIFT
import Foundation
。 - Andrii Chernenkoimport UIKit
或import Foundation
中的至少一个。 - Murray SagalequalsIgnoreCase()
或containsIgnoreCase()
的实现方式。 - Murray Sagal使用
func contains(_ str: String) -> Bool
let string = "hello Swift"
let containsSwift = string.contains("Swift")
print(containsSwift) // prints true
在 Swift 3.0 中
let str = "Hello Swift"
if str.lowercased().contains("Swift".lowercased()) {
print("String Contains Another String")
} else {
print("Not Exists")
}
输出
String Contains Another String
你可以使用以下代码在Swift中轻松实现此操作:
let string = "hello Swift";
let subString = (string as NSString).containsString("Swift")
if(subString){println("Exist")}
在这里,我认为所有的答案要么不起作用,要么有点“hacky”(将其强制转换回NSString)。很可能随着不同的beta版本发布,正确的答案已经发生了改变。
这是我使用的方法:
let string: String = "hello Swift"
if string.rangeOfString("Swift") != nil
{
println("exists")
}
"!= nil" 在 Beta 5 中变成了必需品。
在这里添加一点说明。
您还可以使用以下方法进行本地不区分大小写测试:
- (BOOL)localizedCaseInsensitiveContainsString:(NSString *)aString
示例:
import Foundation
var string: NSString = "hello Swift"
if string.localizedCaseInsensitiveContainsString("Hello") {
println("TRUE")
}
更新
这是iOS和Mac OS X 10.10.x的基础框架的一部分,也是我最初发布时的10.10版本的一部分。
文档生成时间:2014-06-05 12:26:27 -0700 OS X发布说明版权所有© 2014 Apple Inc.。保留所有权利。
OS X 10.10版本发布说明 Cocoa Foundation Framework
NSString现在有以下两个便捷方法:
- (BOOL)containsString:(NSString *)str;
- (BOOL)localizedCaseInsensitiveContainsString:(NSString *)str;
if largeText.contains("stringToSearchFor") { print("yes") }
- MBH