Esta resposta foi atualizada para o Swift 4 e 5 . Se você ainda estiver usando o Swift 1, 2 ou 3, consulte o histórico de revisões.
Você tem algumas opções. Você pode fazer o que @jaumard sugeriu e usarreplacingOccurrences()
let aString ="This is my string"let newString = aString.replacingOccurrences(of:" ", with:"+", options:.literal, range:nil)
E, como observado por @cprcrack abaixo, os parâmetros optionse rangesão opcionais; portanto, se você não deseja especificar opções de comparação de cadeias ou um intervalo para fazer a substituição dentro, precisará apenas do seguinte.
let aString ="This is my string"let newString = aString.replacingOccurrences(of:" ", with:"+")
Ou, se os dados estiverem em um formato específico como este, onde você está apenas substituindo caracteres de separação, você pode usar components()para quebrar a cadeia de caracteres e a matriz e, em seguida, usar a join()função para reuni-los com um separador especificado .
let toArray = aString.components(separatedBy:" ")let backToString = toArray.joined(separator:"+")
Ou, se você estiver procurando uma solução mais Swifty que não utilize a API do NSString, você pode usá-lo.
grande substituição swift2 para stringByReplacingOccurrencesOfString
rjb101
Não sei se estou fazendo algo errado, mas a segunda solução rápida 2.0 me deixa com uma string opcional. O String original é assim: "x86_64"e o novo mapeamento é parecido com"Optional([\"x\", \"8\", \"6\", \"_\", \"6\", \"4\"])"
John Shelley
7
Para quem teve problemas com o uso stringByReplacingOccurrencesOfStringno Swift 2, é necessário import Foundationpoder usar esse método.
Liron Yahdav #
1
uau, stringByReplacingOccurrencesOfString, que intuitivo! Eu estava esperando algo como makeNewStringByReplacingOccurrencesOfFirstArgumentByValueInSecondArgument
Novellizator
64
Você pode usar isto:
let s ="This is my string"let modified = s.replace(" ", withString:"+")
Se você adicionar esse método de extensão em qualquer lugar do seu código:
Eu não nomearia a função "replace", pois isso sugere que ela mude a variável. Use a mesma gramática da Apple. Chamá-lo de "substituir (_: withString :)" torna muito mais claro. Uma futura função de "substituição" mutante também entraria em conflito na nomeação.
Sunkas 24/04/19
57
Solução 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:"+")
Esta é a minha solução preferida, pois permite substituir vários caracteres ao mesmo tempo.
Incinerador
4
Menos aconteceu comigo, eu só quero mudar (uma palavra ou caractere) no String
Então, eu uso o 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
}}
uso
let mobile ="+1 (800) 444-9999"let dictionary =["+":"00"," ":"","(":"",")":"","-":""]let mobileResult = mobile.replace(dictionary)
print(mobileResult)//001800444999
Respostas:
Esta resposta foi atualizada para o Swift 4 e 5 . Se você ainda estiver usando o Swift 1, 2 ou 3, consulte o histórico de revisões.
Você tem algumas opções. Você pode fazer o que @jaumard sugeriu e usar
replacingOccurrences()
E, como observado por @cprcrack abaixo, os parâmetros
options
erange
são opcionais; portanto, se você não deseja especificar opções de comparação de cadeias ou um intervalo para fazer a substituição dentro, precisará apenas do seguinte.Ou, se os dados estiverem em um formato específico como este, onde você está apenas substituindo caracteres de separação, você pode usar
components()
para quebrar a cadeia de caracteres e a matriz e, em seguida, usar ajoin()
função para reuni-los com um separador especificado .Ou, se você estiver procurando uma solução mais Swifty que não utilize a API do NSString, você pode usá-lo.
fonte
"x86_64"
e o novo mapeamento é parecido com"Optional([\"x\", \"8\", \"6\", \"_\", \"6\", \"4\"])"
stringByReplacingOccurrencesOfString
no Swift 2, é necessárioimport Foundation
poder usar esse método.Você pode usar isto:
Se você adicionar esse método de extensão em qualquer lugar do seu código:
Swift 3:
fonte
Solução Swift 3, Swift 4, Swift 5
fonte
Você testou isso:
fonte
Swift 4:
Resultado:
fonte
Estou usando esta extensão:
Uso:
fonte
Uma solução Swift 3 ao longo das linhas de Sunkas:
Usar:
Resultado:
fonte
Uma categoria que modifica uma String mutável existente:
Usar:
fonte
Solução Swift 3 baseada na resposta de Ramis :
Tentei criar um nome de função apropriado de acordo com a convenção de nomenclatura do Swift 3.
fonte
Menos aconteceu comigo, eu só quero mudar (uma palavra ou caractere) no
String
Então, eu uso o
Dictionary
uso
fonte
replace
fonte
replacingOccurrences
emString
?Eu acho que o Regex é a maneira mais flexível e sólida:
fonte
Extensão rápida:
Vá em frente e use-o como
let replacedString = yorString.stringByReplacing(replaceStrings: [" ","?","."], with: "+")
A velocidade da função é algo que eu mal posso me orgulhar, mas você pode passar uma matriz de
String
uma passagem para fazer mais de uma substituição.fonte
Aqui está o exemplo para o Swift 3:
fonte
Isso é fácil no rápido 4.2. basta usar
replacingOccurrences(of: " ", with: "_")
para substituirfonte
Xcode 11 • Swift 5.1
O método de mutação de StringProtocol
replacingOccurrences
pode ser implementado da seguinte maneira:fonte
Se você não quiser usar os
NSString
métodos Objective-C , basta usarsplit
ejoin
:split(string, isSeparator: { $0 == " " })
retorna uma matriz de strings (["This", "is", "my", "string"]
).join
junta-se estes elementos com um+
, resultando na saída desejada:"This+is+my+string"
.fonte
Eu implementei esta função muito simples:
Então você pode escrever:
fonte
você pode testar isso:
deixe newString = test.stringByReplacingOccurrencesOfString ("", withString: "+", opções: nil, intervalo: nil)
fonte
Aqui está uma extensão para um método de substituição de ocorrências no local
String
, que não faz uma cópia desnecessária e faz tudo no lugar:(A assinatura do método também imita a assinatura do built-in
String.replacingOccurrences()
método interno)Pode ser usado da seguinte maneira:
fonte