确定字符串是否包含Swift中集合中的字符的最佳方法是什么

mat*_*ich 35 swift

我需要确定一个字符串是否包含我定义的自定义集中的任何字符.

我在这篇文章中看到你可以使用rangeOfString来确定一个字符串是否包含另一个字符串.当然,如果您一次测试一个角色,这也适用于角色.

我想知道最好的办法是什么.

Mar*_*n R 66

您可以创建一个CharacterSet包含自定义字符集的组件,然后根据此字符集测试成员资格:

斯威夫特3:

let charset = CharacterSet(charactersIn: "aw")
if str.rangeOfCharacter(from: charset) != nil {
    print("yes")
}
Run Code Online (Sandbox Code Playgroud)

对于不区分大小写的比较,请使用

if str.lowercased().rangeOfCharacter(from: charset) != nil {
    print("yes")
}
Run Code Online (Sandbox Code Playgroud)

(假设字符集仅包含小写字母).

斯威夫特2:

let charset = NSCharacterSet(charactersInString: "aw")
if str.rangeOfCharacterFromSet(charset) != nil {
    print("yes")
}
Run Code Online (Sandbox Code Playgroud)

Swift 1.2

let charset = NSCharacterSet(charactersInString: "aw")
if str.rangeOfCharacterFromSet(charset, options: nil, range: nil) != nil {
    println("yes")
}
Run Code Online (Sandbox Code Playgroud)

  • @LeoDabus:https://developer.apple.com/documentation/foundation/nsstring/1416898-rangeofcharacter 指定“锚定”和“向后”作为唯一可能的选项。技术原因可能是 CharacterSet 在内部只是一个大位图(为了效率)。 (2认同)

Tun*_*Fam 10

一线Swift4解决方案,以检查是否包含字母:

CharacterSet.letters.isSuperset(of: CharacterSet(charactersIn: myString) // returns BOOL
Run Code Online (Sandbox Code Playgroud)

需要验证自定义字符集的字符串的另一种情况。例如,如果字符串包含字母以及(例如)破折号和空格:

let customSet: CharacterSet = [" ", "-"]
let finalSet = CharacterSet.letters.union(customSet)
finalSet.isSuperset(of: CharacterSet(charactersIn: myString)) // BOOL
Run Code Online (Sandbox Code Playgroud)

希望有一天能对某人有所帮助:)


rin*_*aro 8

从Swift 1.2你可以使用 Set

var str = "Hello, World!"
let charset: Set<Character> = ["e", "n"]

charset.isSubsetOf(str)     // `true` if `str` contains all characters in `charset`
charset.isDisjointWith(str) // `true` if `str` does not contains any characters in `charset`
charset.intersect(str)      // set of characters both `str` and `charset` contains.
Run Code Online (Sandbox Code Playgroud)

Swift 3或更高版本

let isSubset = charset.isSubset(of: str)        // `true` if `str` contains all characters in `charset`
let isDisjoint = charset.isDisjoint(with: str)  // `true` if `str` does not contains any characters in `charset`
let intersection = charset.intersection(str)    // set of characters both `str` and `charset` contains.
print(intersection.count)   // 1
Run Code Online (Sandbox Code Playgroud)


Mao*_*aor 6

斯威夫特 3 示例:

extension String{
    var isContainsLetters : Bool{
        let letters = CharacterSet.letters
        return self.rangeOfCharacter(from: letters) != nil
    }
}
Run Code Online (Sandbox Code Playgroud)

用法 :

"123".isContainsLetters // false
Run Code Online (Sandbox Code Playgroud)