Raj*_*071 504 string substring nsstring swift
在Objective-C检查一个子字符串的代码中NSString是:
NSString *string = @"hello Swift";
NSRange textRange =[string rangeOfString:@"Swift"];
if(textRange.location != NSNotFound)
{
NSLog(@"exists");
}
Run Code Online (Sandbox Code Playgroud)
但是我如何在Swift中做到这一点?
Jen*_*rth 977
您可以使用Swift执行完全相同的调用:
在Swift 4中,String是一个Character值的集合,它在Swift 2和3中不是这样的,所以你可以使用这个更简洁的代码1:
let string = "hello Swift"
if string.contains("Swift") {
print("exists")
}
Run Code Online (Sandbox Code Playgroud)
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")
}
Run Code Online (Sandbox Code Playgroud)
var string = "hello Swift"
if string.rangeOfString("Swift") != nil{
println("exists")
}
// alternative: not case sensitive
if string.lowercaseString.rangeOfString("swift") != nil {
println("exists")
}
Run Code Online (Sandbox Code Playgroud)
我希望这是一个有用的解决方案,因为包括我在内的一些人通过调用遇到了一些奇怪的问题containsString().1
PS.别忘了import Foundation
Max*_*tin 188
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
Run Code Online (Sandbox Code Playgroud)
一般来说,Swift 4 包含方法,但它可以从iOS 8.0+获得
你可以写扩展contains:和containsIgnoringCase对String
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
}
}
Run Code Online (Sandbox Code Playgroud)
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
}
}
Run Code Online (Sandbox Code Playgroud)
例:
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
Run Code Online (Sandbox Code Playgroud)
Cez*_*zar 50
从文档中,似乎调用containsString()String应该工作:
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'.
所以,你留下了一些选项,其中一个选项是String通过使用bridgeToObjectiveC()其他两个明确地使用a 来明确地将你与Objective-C联系起来NSString,最后一个涉及将其String转换为NSString
通过桥接,你会得到:
var string = "hello Swift"
if string.bridgeToObjectiveC().containsString("Swift") {
println("YES")
}
Run Code Online (Sandbox Code Playgroud)
通过显式键入字符串NSString,您将获得:
var string: NSString = "hello Swift"
if string.containsString("Swift") {
println("YES")
}
Run Code Online (Sandbox Code Playgroud)
如果您有现有的String,可以使用NSString(string :)从中初始化NSString:
var string = "hello Swift"
if NSString(string: string).containsString("Swift") {
println("YES")
}
Run Code Online (Sandbox Code Playgroud)
最后,您可以将现有投射String到NSString如下所示
var string = "hello Swift"
if (string as NSString).containsString("Swift") {
println("YES")
}
Run Code Online (Sandbox Code Playgroud)
Evg*_*nii 37
另一个.支持案例和变音选项.
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
}
}
Run Code Online (Sandbox Code Playgroud)
MyString.contains("Niels Bohr", substring: "Bohr") // true
Run Code Online (Sandbox Code Playgroud)
自iOS 9以来可用的案例和变音符号不敏感功能.
if #available(iOS 9.0, *) {
"Für Elise".localizedStandardContains("fur") // true
}
Run Code Online (Sandbox Code Playgroud)
Mur*_*gal 31
从Xcode 7.1和Swift 2.1 containsString()开始,对我来说工作正常.
let string = "hello swift"
if string.containsString("swift") {
print("found swift")
}
Run Code Online (Sandbox Code Playgroud)
斯威夫特4:
let string = "hello swift"
if string.contains("swift") {
print("found swift")
}
Run Code Online (Sandbox Code Playgroud)
一个不区分大小写的Swift 4示例:
let string = "Hello Swift"
if string.lowercased().contains("swift") {
print("found swift")
}
Run Code Online (Sandbox Code Playgroud)
或者使用不区分大小写的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
Run Code Online (Sandbox Code Playgroud)
Sar*_*ith 22
使用
func contains(_ str: String) -> Bool
Run Code Online (Sandbox Code Playgroud)
let string = "hello Swift"
let containsSwift = string.contains("Swift")
print(containsSwift) // prints true
Run Code Online (Sandbox Code Playgroud)
Ash*_*k R 16
>在SWIFT 3.0中
let str = "Hello Swift"
if str.lowercased().contains("Swift".lowercased()) {
print("String Contains Another String")
} else {
print("Not Exists")
}
Run Code Online (Sandbox Code Playgroud)
产量
String Contains Another String
Run Code Online (Sandbox Code Playgroud)
小智 15
您可以使用代码在Swift中轻松完成此操作:
let string = "hello Swift";
let subString = (string as NSString).containsString("Swift")
if(subString){println("Exist")}
Run Code Online (Sandbox Code Playgroud)
mar*_*nte 10
这是答案的附录.
您还可以使用以下方法执行本地不区分大小写的测试:
- (BOOL)localizedCaseInsensitiveContainsString:(NSString *)aString
Run Code Online (Sandbox Code Playgroud)
例:
import Foundation
var string: NSString = "hello Swift"
if string.localizedCaseInsensitiveContainsString("Hello") {
println("TRUE")
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
这是iOS和Mac OS X 10.10.x的Foundation Framework的 一部分,并且是我原始发布时间的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;
你可以按照你提到的去做:
\n\nimport Foundation\n...\nstring.contains("Swift");\nRun Code Online (Sandbox Code Playgroud)\n\n来自文档:
\n\n\n\n\nSwift\xe2\x80\x99s
\nString类型无缝桥接到 Foundation\xe2\x80\x99sNSString\n 类。如果您正在使用 Cocoa 或 Cocoa Touch 中的 Foundation 框架,除了本章中描述的字符串功能之外,整个NSStringAPI 还可以调用您创建的任何 值。String您还可以将字符串值与任何需要 NSString 实例的 API 一起使用。
您需要import Foundation桥接这些NSString方法并使它们可用于 Swift 的 String 类。
小智 9
这是我在快速操场上的第一次尝试.我通过提供两个新函数(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
}
}
Run Code Online (Sandbox Code Playgroud)
像这样使用它
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
Run Code Online (Sandbox Code Playgroud)
我欢迎任何反馈:)
在这里的所有答案中,我认为它们要么不起作用,要么它们有点像黑客(回到NSString).对于不同的测试版本,很可能对此的正确答案已经改变.
这是我使用的:
let string: String = "hello Swift"
if string.rangeOfString("Swift") != nil
{
println("exists")
}
Run Code Online (Sandbox Code Playgroud)
Beta 5需要"!= nil".
小智 7
Swift 5,不区分大小写:
if string.localizedLowercase.contains("swift".localizedLowercase){
// your code here
}
Run Code Online (Sandbox Code Playgroud)
这个给你:
let s = "hello Swift"
if let textRange = s.rangeOfString("Swift") {
NSLog("exists")
}
Run Code Online (Sandbox Code Playgroud)
您无需为此编写任何自定义代码.从1.2版本开始,Swift已经拥有了您需要的所有方法:
count(string);contains(string, substring);startsWith(string, substring)在Swift 3中
if((a.range(of: b!, options: String.CompareOptions.caseInsensitive, range: nil, locale: nil)) != nil){
print("Done")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
373976 次 |
| 最近记录: |