Каков наилучший способ определить, содержит ли строка символ из набора в Swift
Мне нужно определить, содержит ли строка какой-либо символ из настраиваемого набора, который я определил.
Я вижу из этого сообщение, что вы можете использовать rangeOfString, чтобы определить, содержит ли строка другую строку. Это, конечно же, также работает для символов, если вы тестируете каждый символ по одному.
Мне интересно, что лучший способ сделать это.
Ответы
Ответ 1
Вы можете создать CharacterSet
, содержащий набор ваших настраиваемых символов
а затем проверьте принадлежность к этому набору символов:
Swift 3:
let charset = CharacterSet(charactersIn: "aw")
if str.rangeOfCharacter(from: charset) != nil {
print("yes")
}
Для сравнения без учета регистра используйте
if str.lowercased().rangeOfCharacter(from: charset) != nil {
print("yes")
}
(предполагая, что набор символов содержит только строчные буквы).
Swift 2:
let charset = NSCharacterSet(charactersInString: "aw")
if str.rangeOfCharacterFromSet(charset) != nil {
print("yes")
}
Swift 1.2
let charset = NSCharacterSet(charactersInString: "aw")
if str.rangeOfCharacterFromSet(charset, options: nil, range: nil) != nil {
println("yes")
}
Ответ 2
ONE LINE Swift4 решение, чтобы проверить, содержит ли буквы:
CharacterSet.letters.isSuperset(of: CharacterSet(charactersIn: myString) // returns BOOL
Еще один случай, когда вам нужно проверить строку для пользовательских наборов символов. Например, если строка содержит только буквы и (например) тире и пробелы:
let customSet: CharacterSet = [" ", "-"]
let finalSet = CharacterSet.letters.union(customSet)
finalSet.isSuperset(of: CharacterSet(charactersIn: myString)) // BOOL
Надеюсь, это поможет кому-то однажды :)
Ответ 3
Из 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.
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
Ответ 4
Используя Swift 3, чтобы определить, содержит ли ваша строка символы из определенного набора символов:
let letters = CharacterSet.alphanumerics
let string = "my-string_"
if (string.trimmingCharacters(in: letters) != "") {
print("Invalid characters in string.")
}
else {
print("Only letters and numbers.")
}
Ответ 5
swift3
var str = "Hello, playground"
let res = str.characters.contains { ["x", "z"].contains( $0 ) }
Ответ 6
Пример Swift 3:
extension String{
var isContainsLetters : Bool{
let letters = CharacterSet.letters
return self.rangeOfCharacter(from: letters) != nil
}
}
Использование:
"123".isContainsLetters // false
Ответ 7
Вы можете сделать это следующим образом:
var string = "Hello, World!"
if string.rangeOfString("W") != nil {
println("exists")
} else {
println("doesn't exist")
}
// alternative: not case sensitive
if string.lowercaseString.rangeOfString("w") != nil {
println("exists")
} else {
println("doesn't exist")
}
Ответ 8
func isAnyCharacter( from charSetString: String, containedIn string: String ) -> Bool
{
return Set( charSetString.characters ).isDisjointWith( Set( string.characters) ) == false
}
Ответ 9
Swift 4
let myString = "Some Words"
if myString.contains("Some"){
print("myString contains the word 'Some'")
}else{
print("myString does NOT contain the word 'Some'")
}
Свифт 3:
let myString = "Some Words"
if (myString.range(of: "Some") != nil){
print("myString contains the word 'Some'")
}else{
print("Word does not contain 'Some'")
}
Ответ 10
Используйте как это в Swift 4.2
var string = "Hello, World!"
let charSet = NSCharacterSet.letters
if string.rangeOfCharacter(from:charSet)?.isEmpty == false{
print ("String contain letters");
}