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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何检查字符串是否包含Swift中的另一个字符串?相关的知识,希望对你有一定的参考价值。

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

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

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

答案

您可以使用Swift执行完全相同的调用:

Swift 4 & Swift 5

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

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")
}

Older Swift

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

Footnotes

  1. 请记住,在字符串上使用集合函数有一些edge cases可以给你意想不到的结果,例如: G。处理表情符号或其他字形集合时,如重音字母。
另一答案

这是我在快速操场上的第一次尝试。我通过提供两个新函数(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

我欢迎任何反馈:)

另一答案

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

这是我使用的:

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

Beta 5需要“!= nil”。

另一答案

这个给你:

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

您无需为此编写任何自定义代码。从1.2版本开始,Swift已经拥有了您需要的所有方法:

  • 得到字符串长度:count(string);
  • 检查字符串是否包含子字符串:contains(string, substring);
  • 检查字符串是否以substring:startsWith(string, substring)开头
  • 等等。
另一答案

在Swift 3中

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

干得好!准备好Xcode 8和Swift 3。

import UIKit

let mString = "This is a String that contains something to search."
let stringToSearchUpperCase = "String"
let stringToSearchLowerCase = "string"

mString.contains(stringToSearchUpperCase) //true
mString.contains(stringToSearchLowerCase) //false
mString.lowercased().contains(stringToSearchUpperCase) //false
mString.lowercased().contains(stringToSearchLowerCase) //true
另一答案

string.containsString仅在10.10 Yosemite(可能是ios8)中可用。同样将其与10.9中的ObjectiveC崩溃联系起来。您正在尝试将NSString传递给NSCFString。我不知道区别,但是当它在OS X 10.9应用程序中执行此代码时,我可以说10.9 barfs。

以下是Swift与10.9和10.10的区别:https://developer.apple.com/library/prerelease/mac/documentation/General/Reference/APIDiffsMacOSX10_10SeedDiff/index.html containsString仅在10.10中可用

上面的字符串范围在10.9上很好用。我发现使用Xcode beta2在10.9上开发是超级稳定的。我不使用游乐场或操场的命令行版本。我发现是否导入了正确的框架,自动完成非常有用。

另一答案

Xcode 8 / Swift 3版本:

let string = "hello Swift"

if let range = string.range(of: "Swift") {
    print("exists at range \(range)")
} else {
    print("does not exist")
}

if let lowercaseRange = string.lowercased().range(of: "swift") {
    print("exists at range \(lowercaseRange)")
} else {
    print("does not exist")
}

你也可以使用contains

string.contains("swift") // false
string.contains("Swift") // true
另一答案

检查它是否包含'Hello'

let s = "Hello World"

if s.rangeOfString("Hello") != nil {
    print("Yes it contains 'Hello'")
}
另一答案

Swift 4方式检查子串,包括必要的Foundation(或UIKit)框架导入:

import Foundation // or UIKit

let str = "Oh Canada!"

str.contains("Can") // returns true

str.contains("can") // returns false

str.lowercased().contains("can") // case-insensitive, returns true

除非导入Foundation(或UIKit)框架,否则str.contains("Can")将给出编译器错误。


这个答案是回流manojlds's answer,这是完全正确的。我不知道为什么这么多的答案经历了很多麻烦来重新创建FoundationString.contains(subString: String)方法。

另一答案

延伸方式

Swift 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有contains方法,但它可以从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 
   }
 }

Older Swift version

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
另一答案

使用swift 4中的新语法,你可以

string.contains("Swift 4 is the best")

string是你的字符串变量

另一答案
// Search string exist in employee name finding.
var empName:NSString! = employeeDetails[filterKeyString] as N

以上是关于如何检查字符串是否包含Swift中的另一个字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 Swift 字符串是不是只包含某些字符?

如何判断一个字符串是不是包含 POSIX sh 中的另一个字符串?

如何判断一个字符串是不是包含 POSIX sh 中的另一个字符串?

如何检查我的字符串是不是与正则表达式匹配 - Swift 3 [重复]

如何检查String是否是Swift中的Int?

SQL 中的“包含”和“不包含”方法或使用 Java 脚本 UDF