如何检查字符串是否包含Swift中的另一个字符串?

 手机用户2602933165 发布于 2023-01-11 18:06

Objective-C检查一个子字符串的代码中NSString是:

NSString *string = @"hello Swift";
NSRange textRange =[string rangeOfString:@"Swift"];
if(textRange.location != NSNotFound)
{
    NSLog(@"exists");
}

但是我如何在Swift中做到这一点?

14 个回答
  • 从Xcode 7.1和Swift 2.1 containsString()开始,对我来说工作正常.

    let string = "hello swift"
    if string.containsString("swift") {
        print("found 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
    

    2023-01-11 18:07 回答
  • 您可以使用Swift执行完全相同的调用:

    斯威夫特4

    在Swift 4中,String是一个Character值的集合,它在Swift 2和3中不是这样的,所以你可以使用这个更简洁的代码1:

    let string = "hello Swift"
    if string.contains("Swift") {
        print("exists")
    }
    

    Swift 3.0+

    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

    PS.别忘了import Foundation

    脚注

      请记住,在字符串上使用集合函数有一些边缘情况可以给你意想不到的结果,例如在处理表情符号或其他字形集群(如重音字母)时.

    2023-01-11 18:07 回答
  • 这是我在快速操场上的第一次尝试.我通过提供两个新函数(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
    

    我欢迎任何反馈:)

    2023-01-11 18:07 回答
  • 从文档中,似乎调用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")
    }
    

    通过显式键入字符串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")
    }
    

    最后,您可以将现有投射StringNSString如下所示

    var string = "hello Swift"
    if (string as NSString).containsString("Swift") {
        println("YES")
    }
    

    2023-01-11 18:07 回答
  • 这个给你:

    let s = "hello Swift"
    if let textRange = s.rangeOfString("Swift") {
        NSLog("exists")
    }
    

    2023-01-11 18:07 回答
  • 延伸方式

    斯威夫特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+获得


    Swift 3.1

    你可以写扩展contains:containsIgnoringCaseString

    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
    

    2023-01-11 18:08 回答
  • 另一个.支持案例和变音选项.

    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
    }
    

    2023-01-11 18:08 回答
  • >在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
    

    2023-01-11 18:08 回答
  • 您无需为此编写任何自定义代码.从1.2版本开始,Swift已经拥有了您需要的所有方法:

    得到字符串长度:count(string);

    检查字符串是否包含substring : contains(string, substring);

    检查字符串是否以substring开头: startsWith(string, substring)

    等等.

    2023-01-11 18:08 回答
  • 您可以使用代码在Swift中轻松完成此操作:

    let string = "hello Swift";
    let subString = (string as NSString).containsString("Swift")
    if(subString){println("Exist")}
    

    2023-01-11 18:08 回答
  • 这是答案的附录.

    您还可以使用以下方法执行本地不区分大小写的测试:

     - (BOOL)localizedCaseInsensitiveContainsString:(NSString *)aString
    

    例:

        import Foundation
    
        var string: NSString  =  "hello Swift"
       if string.localizedCaseInsensitiveContainsString("Hello") {
        println("TRUE")
    }
    

    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;

    2023-01-11 18:08 回答
  • 在Swift 4.2中

    使用

    func contains(_ str: String) -> Bool
    

    let string = "hello Swift"
    let containsSwift = string.contains("Swift")
    print(containsSwift) // prints true
    

    2023-01-11 18:08 回答
  • 在这里的所有答案中,我认为它们要么不起作用,要么它们有点像黑客(回到NSString).对于不同的测试版本,很可能对此的正确答案已经改变.

    这是我使用的:

    let string: String = "hello Swift"
    if string.rangeOfString("Swift") != nil
    {
        println("exists")
    }
    

    Beta 5需要"!= nil".

    2023-01-11 18:08 回答
  • 在Swift 3中

    if((a.range(of: b!, options: String.CompareOptions.caseInsensitive, range: nil, locale: nil)) != nil){
        print("Done")
    }
    

    2023-01-11 18:10 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有