Comment remplacer la nième caractère d'une chaîne par une autre
Comment pourrais-je remplacer nième caractère d'un String
avec un autre?
func replace(myString:String, index:Int, newCharac:Character) -> String {
//Write correct code here
return modifiedString
}
Par exemple, replace("House", 2, "r")
doit être égale à "Horse"
.
Ceci est similaire à cette question. Il a réponse trop stackoverflow.com/questions/6843441/...
Question similaire, mais différente de la langue: Swift n'est pas le JavaScript.
Question similaire, mais différente de la langue: Swift n'est pas le JavaScript.
OriginalL'auteur Piercy | 2014-07-16
Vous devez vous connecter pour publier un commentaire.
Veuillez voir NateCook réponse pour plus de détails
Ce n'est plus valide et obsolètes.
Vous pouvez toujours utiliser swift
String
avecNSString
.Vous pouvez donc appelerNSString
fonction de swiftString
.Par vieux
stringByReplacingCharactersInRange:
vous pouvez le faire comme ceciOriginalL'auteur codester
Solutions qui utilisent
NSString
méthodes échouent pour toutes les chaînes multi-octets de caractères Unicode. Voici deux Swift-native façons d'aborder le problème:Vous pouvez utiliser le fait qu'un
String
est une séquence deCharacter
pour convertir la chaîne en un tableau, le modifier, et de convertir le tableau en arrière:Alternativement, vous pouvez parcourir la chaîne de vous-même:
Depuis ces séjour entièrement à l'intérieur de Swift, ils sont à la fois Unicode-coffre-fort:
dans Swift 4 vous pouvez modifier
var chars = Array(myString.characters)
àvar chars = Array(myString)
de fixer la désapprobation d'avertissement. Source: stackoverflow.com/a/25921323/62Veuillez ajouter cette Réponse. Merci
ok, j'ai mis à jour.
OriginalL'auteur Nate Cook
J'ai trouvé cette solution.
OriginalL'auteur Igor Kulagin
Dans Swift 4 il est beaucoup plus facile.
Ceci est un exemple:
où le résultat est
Le type de
newString
est sous-Chaîne. Les deuxprefix
etdropFirst
retourSubstring
. Sous-chaîne est une tranche de chaîne, en d'autres termes, les sous-chaînes sont rapide, car vous n'avez pas besoin d'allouer de la mémoire pour le contenu de la chaîne, mais le même espace de stockage que la chaîne d'origine est utilisée.Substring
?Exactement le même. Vous pouvez remplacer la première ligne de l'exemple avec
let oldString: Substring = "Hello, playground"
et il fonctionne très bien.OriginalL'auteur Luca Torella
J'ai développé lors de Nate Cuisiniers réponse et l'a transformée en une chaîne d'extension.
utilisation:
résultat est "à Cheval"
OriginalL'auteur Greg
Après avoir regardé la Swift Docs, j'ai réussi à faire cette fonction:
Veuillez noter que ce n'est pas testée, mais elle devrait vous donner une bonne idée.
OriginalL'auteur Joshcamas
Je préfère passer un
String
qu'unCharacter
.OriginalL'auteur Rivera
Je pense que @Greg cherche à réaliser avec son extension est: est-ce
utilisation:
OriginalL'auteur Yurii Koval
Chaînes dans swift n'avez pas un accesseur pour lire ou écrire un caractère unique. Il y a un excellent post de blog par Ole Begemann décrivant comment les chaînes de travail rapide.
Remarque: la mise en œuvre ci-dessous est faux, lire additif
Donc le droit chemin est en prenant la partie gauche de la chaîne jusqu'à la
index -1
caractère, ajoutez le remplacement de caractère, puis ajouter la chaîne à partir de l'index + 1 jusqu'à la fin:Remarque: dans mon application, j'ai choisi de retourner la chaîne d'origine si l'index n'est pas dans une plage valide
Additif Grâce à @slazyk, qui a trouvé que mon application est incorrecte (voir le commentaire), je suis en fournissant une nouvelle swift seule version de la fonction.
@codester la réponse de l'air très bon, et c'est probablement ce que j'utilise moi-même.
Il serait intéressant de savoir comment les performances de comparer si, à l'aide d'un entièrement swift solution et l'intégration d'objective-c à la place.
substringToIndex
etsubstringFromIndex
sontNSString
méthodes, et ils utilisent des indices tels que définis pourNSString
, d'autre part, vous calculerlen
à l'aide decountElements
. Vous devriez coller avecNSString
s de l'indexation et de la longueur (utf16count
dans Swift) ouString
s. Ils diffèrent.Ok my bad, je n'ai pas vérifier la source de ce que l'intellisense m'a suggéré. Merci pour cette remarque, je l'apprécie et j'accepte les downvote.
OriginalL'auteur Antonio
Ici est une réponse efficace :
substringToIndex()
etsubstringFromIndex()
utilisation NSString d'indexation, et ne sont donc pas Unicode coffre-fort.Vous avez raison, mais je suis le seul à traiter avec des caractères alphabétiques. Je devrais avoir dit cela, cependant.
OriginalL'auteur Piercy