J'essaie de tester si une chaîne Swift commence ou se termine par une certaine valeur. Ces méthodes n'existent pas:
var str = "Hello, playground"
str.startsWith("Hello") // error
str.endsWith("ground") // error
Je voudrais aussi obtenir les chaînes de préfixe et de suffixe. Je pourrais trouver une sous-chaîne, comme il est répondu ici et ici , mais les gammes sont très pénibles à Swift.
Y a-t-il un moyen plus facile de le faire?
(Je suis tombé sur la réponse quand je lisais la documentation , et puisqu'un SO réponse n'est pas venu pour mes termes de recherche, J'ajoute mes questions et réponses ici.)
mis à jour pour Swift 4
Vous pouvez utiliser les méthodes hasPrefix(_:)
et hasSuffix(_:)
pour tester l'égalité avec une autre chaîne.
let str = "Hello, playground"
if str.hasPrefix("Hello") { // true
print("Prefix exists")
}
if str.hasSuffix("ground") { // true
print("Suffix exists")
}
Pour obtenir la sous-chaîne de préfixe ou de suffixe réelle, vous pouvez utiliser l'une des méthodes suivantes. Je recommande la première méthode pour sa simplicité. Toutes les méthodes utilisent str
comme
let str = "Hello, playground"
Méthode 1: (recommandé) prefix(Int)
et suffix(Int)
let prefix = String(str.prefix(5)) // Hello
let suffix = String(str.suffix(6)) // ground
C'est la meilleure méthode à mon avis. Contrairement aux méthodes 2 et 3 ci-dessous, cette méthode ne sera pas bloquée si les index sortent des limites. Il ne fera que renvoyer tous les caractères de la chaîne.
let prefix = String(str.prefix(225)) // Hello, playground
let suffix = String(str.suffix(623)) // Hello, playground
Bien sûr, parfois, les plantages sont une bonne chose, car ils vous font savoir que votre code pose un problème. Considérez donc la deuxième méthode ci-dessous également. Il y aura une erreur si l'index sort des limites.
Méthode 2: prefix(upto:)
et suffix(from:)
Les index Swift String sont délicats car ils doivent prendre en compte des caractères spéciaux (comme emoji). Cependant, une fois l'index obtenu, il est facile d'obtenir le préfixe ou le suffixe. (Voir mon autre réponse sur String.Index
.)
let prefixIndex = str.index(str.startIndex, offsetBy: 5)
let prefix = String(str.prefix(upTo: prefixIndex)) // Hello
let suffixIndex = str.index(str.endIndex, offsetBy: -6)
let suffix = String(str.suffix(from: suffixIndex)) // ground
Si vous voulez éviter de sortir des limites, vous pouvez créer un index en utilisant limitedBy
(à nouveau, voir cette réponse ).
Méthode 3: indices
Puisque String est une collection, vous pouvez utiliser des indices pour obtenir le préfixe et le suffixe.
let prefixIndex = str.index(str.startIndex, offsetBy: 5)
let prefix = String(str[..<prefixIndex]) // Hello
let suffixIndex = str.index(str.endIndex, offsetBy: -6)
let suffix = String(str[suffixIndex...]) // ground
Préfixe et suffixe égalité
Pour vérifier si une chaîne a un préfixe ou un suffixe de chaîne particulier, appelez les méthodes hasPrefix ( :) et hasSuffix ( :) de la chaîne, qui prennent toutes deux la même valeur. seul argument de type String et renvoie une valeur booléenne.