2016-05-07 1 views
2

Angenommen, ich habe eine Zeichenfolge, und ich möchte das erste "a" in dieser Zeichenfolge in ein "e" ändern, um die richtige Schreibweise zu erhalten.swift - replaceRange() verwenden, um bestimmte Vorkommnisse in einer Zeichenfolge zu ändern

let animal = "elaphant" 

stringByReplacingOccurrencesOfString() Verwendung wird jedes „a“ ändern in dieser Zeichenfolge zu einem „e“, welcher:

elephent 

Ich versuche, den Index des ersten „a“ zu bekommen und dann ersatzlos mit replaceRange(), etwa so:

let index = animal.characters.indexOf("a") 
let nextIndex = animal.startIndex.distanceTo(index!) 
animal = animal.replaceRange(animal.startIndex.advancedBy(nextIndex)..<animal.startIndex.advancedBy(1), with: "e") 

jedoch dieser Code mir folgende Fehler gibt:

Cannot assign value of type '()' to type 'String' 

Ich habe versucht, einen Weg zu finden, nextIndex in Int umzuwandeln, aber ich habe das Gefühl, dass ich diese ganze Methode falsch verstanden habe. Hilfe?

Antwort

4

Das ist das, was Sie tun mögen:

var animal = "elaphant" 
if let range = animal.rangeOfString("a") { 
    animal.replaceRange(range, with: "e") 
} 

rangeOfString wird nach dem ersten Auftreten des bereitgestellten String suchen und wenn diese Teilkette gefunden werden kann, wird es einen optionalen Bereich sonst zurückkehren wird es Null zurück.

Wir müssen den optionalen und den sichersten Weg mit einer if let Anweisung auspacken, also weisen wir unseren Bereich der Konstante range zu.

Die replaceRange wird tun, wie es vorschlägt, in diesem Fall brauchen wir animal, um eine var zu sein.

+0

Wow, ich denke, es war Grübeln. Was wäre, wenn ich das zweite "a" anstelle des ersten "e" in ein "e" ändern möchte? – wasimsandhu

+0

@wasimsandhu Die 'rangeOfString'-Funktion hat einen Standardparameter namens options, Sie können' animal.rangeOfString ("a", Optionen: .BackwardsSearch) 'verwenden, um die erste Übereinstimmung am Ende der Zeichenfolge zu finden. –

+0

@LeoDabus hat eine viel flexiblere Antwort auf diese Frage zur Verfügung gestellt, ich würde empfehlen, einen Blick darauf zu werfen. Da hilft diese Antwort wirklich beim ersten und letzten Vorkommen des Buchstabens "a". –

0

in Spielplatz Geprüft:

var animal = "elaphant" 
if let range = animal.rangeOfString("a") { 
animal.replaceRange(range, with: "e") 
} 

print (animal) 
2
var animal = "elaphant" 
if let index = animal.characters.indexOf("a") { 
    animal.replaceRange(index...index, with: "e") 
} 
Verwandte Themen