let aString ="This is my string"let newString = aString.replacingOccurrences(of:" ", with:"+", options:.literal, range:nil)
Jak zauważono poniżej przez @cprcrack, parametry optionsi rangesą opcjonalne, więc jeśli nie chcesz określać opcji porównywania ciągów lub zakresu w celu wykonania zamiany, potrzebujesz tylko następujących elementów.
let aString ="This is my string"let newString = aString.replacingOccurrences(of:" ", with:"+")
Lub, jeśli dane mają określony format, taki jak ten, w którym właśnie zastępujesz znaki separacji, możesz użyć, components()aby rozbić ciąg na i tablicę, a następnie możesz użyć join()funkcji, aby połączyć je z powrotem z określonym separatorem .
let toArray = aString.components(separatedBy:" ")let backToString = toArray.joined(separator:"+")
Lub jeśli szukasz bardziej Swifty rozwiązania, które nie korzysta z API z NSString, możesz to wykorzystać.
świetny zamiennik swift2 dla stringByReplacingOccurrencesOfString
rjb101
Nie wiem, czy robię coś nie tak, ale drugie szybkie rozwiązanie 2.0 pozostawia mi opcjonalny ciąg. Oryginalny ciąg wygląda tak: "x86_64"a nowe mapowanie wygląda"Optional([\"x\", \"8\", \"6\", \"_\", \"6\", \"4\"])"
John Shelley
7
Każdy, kto miał problemy z używaniem stringByReplacingOccurrencesOfStringw Swift 2, musi import Foundationmieć możliwość korzystania z tej metody.
Liron Yahdav
1
wow, stringByReplacingOccurrencesOfString, jak intuicyjnie! Spodziewałem się czegoś takiego jak makeNewStringByReplacingOccurrencesOfFirstArgumentByValueInSecondArgument
Novellizator
64
Możesz użyć tego:
let s ="This is my string"let modified = s.replace(" ", withString:"+")
Jeśli dodasz tę metodę rozszerzenia w dowolnym miejscu w kodzie:
Nie nazwałbym funkcji „zamień”, ponieważ sugeruje to, że mutuje ona zmienną. Używaj tej samej gramatyki, co Apple. Nazwanie go „zamienianiem (_: withString :)” sprawia, że jest to o wiele wyraźniejsze. Przyszła funkcja mutacji „zamień” również kolidowałaby w nazewnictwie.
Sunkas
57
Rozwiązanie Swift 3, Swift 4, Swift 5
let exampleString ="Example string"//Solution suggested above in Swift 3.0
let stringToArray = exampleString.components(separatedBy:" ")let stringFromArray = stringToArray.joined(separator:"+")//Swiftiest solution
let swiftyString = exampleString.replacingOccurrences(of:" ", with:"+")
To jest moje preferowane rozwiązanie, ponieważ pozwala zastąpić wiele znaków jednocześnie.
Spalarnia
4
Mniej mi się przydarzyło, chcę tylko zmienić (słowo lub znak) w String
Więc korzystam z Dictionary
extensionString{func replace(_ dictionary:[String:String])->String{var result =String()var i =-1for(of , with):(String,String)in dictionary{
i +=1if i<1{
result =self.replacingOccurrences(of: of, with: with)}else{
result = result.replacingOccurrences(of: of, with: with)}}return result
}}
stosowanie
let mobile ="+1 (800) 444-9999"let dictionary =["+":"00"," ":"","(":"",")":"","-":""]let mobileResult = mobile.replace(dictionary)
print(mobileResult)//001800444999
Idź dalej i używaj go jak let replacedString = yorString.stringByReplacing(replaceStrings: [" ","?","."], with: "+")
Szybkość funkcji jest czymś, z czego nie mogę się pochwalić, ale możesz przekazać tablicę Stringw jednym przejściu, aby wykonać więcej niż jedną zamianę.
Odpowiedzi:
Ta odpowiedź została zaktualizowana dla Swift 4 i 5 . Jeśli nadal używasz Swift 1, 2 lub 3, zobacz historię zmian.
Masz kilka opcji. Możesz zrobić zgodnie z sugestią @jaumard i użyć
replacingOccurrences()
Jak zauważono poniżej przez @cprcrack, parametry
options
irange
są opcjonalne, więc jeśli nie chcesz określać opcji porównywania ciągów lub zakresu w celu wykonania zamiany, potrzebujesz tylko następujących elementów.Lub, jeśli dane mają określony format, taki jak ten, w którym właśnie zastępujesz znaki separacji, możesz użyć,
components()
aby rozbić ciąg na i tablicę, a następnie możesz użyćjoin()
funkcji, aby połączyć je z powrotem z określonym separatorem .Lub jeśli szukasz bardziej Swifty rozwiązania, które nie korzysta z API z NSString, możesz to wykorzystać.
źródło
"x86_64"
a nowe mapowanie wygląda"Optional([\"x\", \"8\", \"6\", \"_\", \"6\", \"4\"])"
stringByReplacingOccurrencesOfString
w Swift 2, musiimport Foundation
mieć możliwość korzystania z tej metody.Możesz użyć tego:
Jeśli dodasz tę metodę rozszerzenia w dowolnym miejscu w kodzie:
Swift 3:
źródło
Rozwiązanie Swift 3, Swift 4, Swift 5
źródło
Czy przetestowałeś to:
źródło
Swift 4:
Wynik:
źródło
Używam tego rozszerzenia:
Stosowanie:
źródło
Rozwiązanie Swift 3 na wzór Sunkasa:
Posługiwać się:
Wynik:
źródło
Kategoria, która modyfikuje istniejący zmienny ciąg:
Posługiwać się:
źródło
Rozwiązanie Swift 3 oparte na odpowiedzi Ramisa :
Próbowałem wymyślić odpowiednią nazwę funkcji zgodnie z konwencją nazewnictwa Swift 3.
źródło
Mniej mi się przydarzyło, chcę tylko zmienić (słowo lub znak) w
String
Więc korzystam z
Dictionary
stosowanie
źródło
replace
źródło
replacingOccurrences
wString
?Myślę, że Regex to najbardziej elastyczny i solidny sposób:
źródło
Szybkie rozszerzenie:
Idź dalej i używaj go jak
let replacedString = yorString.stringByReplacing(replaceStrings: [" ","?","."], with: "+")
Szybkość funkcji jest czymś, z czego nie mogę się pochwalić, ale możesz przekazać tablicę
String
w jednym przejściu, aby wykonać więcej niż jedną zamianę.źródło
Oto przykład Swift 3:
źródło
Jest to łatwe w szybkim 4.2. wystarczy użyć
replacingOccurrences(of: " ", with: "_")
do zamianyźródło
Xcode 11 • Swift 5.1
Metodę mutacji StringProtocol
replacingOccurrences
można zaimplementować w następujący sposób:źródło
Jeśli nie chcesz używać
NSString
metod Objective-C , możesz po prostu użyćsplit
ijoin
:split(string, isSeparator: { $0 == " " })
zwraca tablicę ciągów (["This", "is", "my", "string"]
).join
łączy się te elementy z A+
, w wyniku pożądaną wydajność:"This+is+my+string"
.źródło
Zaimplementowałem tę bardzo prostą funkcję:
Możesz więc napisać:
źródło
możesz to przetestować:
niech newString = test.stringByReplacingOccurrencesOfString („”, withString: „+”, opcje: zero, zakres: zero)
źródło
Oto rozszerzenie metody zastępowania wystąpień w miejscu
String
, która nie eliminuje zbędnej kopii i robi wszystko na swoim miejscu:(Podpis metody naśladuje również podpis wbudowanej
String.replacingOccurrences()
metody)Można użyć w następujący sposób:
źródło