web-dev-qa-db-fra.com

Comment vérifier avec quelle chaîne commence par (préfixe) ou se termine par (suffixe) dans Swift

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.)

92
Suragch

mis à jour pour Swift 4

Vérification du début et de la fin d'une chaîne

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

Obtention des sous-chaînes de préfixe et de suffixe réelles

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

Lectures complémentaires

177
Suragch

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.

Apple Doc

4
Gobi M