Un moyen de remplacer les caractères sur Swift String?

je cherche un moyen de remplacer les caractères dans un Swift String .

exemple: "This is my string"

je voudrais remplacer with + par "This+is+my+string" .

Comment puis-je y parvenir?

362
demandé sur Karthik Kumar 2014-06-13 12:28:39

15 réponses

cette réponse a été mise à jour pour Swift 4 . Si vous utilisez toujours Swift 1, 2 ou 3, consultez l'historique des révisions.

vous avez quelques options. Vous pouvez faire comme @jaumard l'a suggéré et utiliser replacingOccurrences()

let aString = "This is my string"
let newString = aString.replacingOccurrences(of: " ", with: "+", options: .literal, range: nil)

et comme noté par @cprcrack ci-dessous, les paramètres options et range sont optionnels, donc si vous ne voulez pas spécifier des options de comparaison de chaîne ou une plage pour faire le remplacement dans, vous avez seulement besoin de ce qui suit.

let aString = "This is my string"
let newString = aString.replacingOccurrences(of: " ", with: "+")

ou, si les données sont dans un format spécifique comme celui-ci, où vous êtes juste en train de remplacer les caractères de séparation, vous pouvez utiliser components() pour casser la chaîne en et tableau, et ensuite vous pouvez utiliser la fonction join() pour les remettre ensemble avec un séparateur spécifié.

let toArray = aString.components(separatedBy: " ")
let backToString = toArray.joined(separator: "+")

ou si vous cherchez une solution plus rapide qui n'utilise pas L'API de NSString, vous pouvez utiliser ceci.

let aString = "Some search text"

let replaced = String(aString.map {
    "151930920" == " " ? "+" : "151930920"
})
705
répondu Mick MacCallum 2018-04-25 02:01:10

vous pouvez utiliser ceci:

let s = "This is my string"
let modified = s.replace(" ", withString:"+")    

si vous ajoutez cette méthode d'extension n'importe où dans votre code:

extension String
{
    func replace(target: String, withString: String) -> String
    {
       return self.stringByReplacingOccurrencesOfString(target, withString: withString, options: NSStringCompareOptions.LiteralSearch, range: nil)
    }
}

Swift 3:

extension String
{
    func replace(target: String, withString: String) -> String
    {
        return self.replacingOccurrences(of: target, with: withString, options: NSString.CompareOptions.literal, range: nil)
    }
}
58
répondu Lee 2016-10-27 12:50:31

Swift 3, Solution Swift 4

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: "+")
40
répondu Ben Sullivan 2018-09-15 18:00:06

avez-vous testé ceci:

var test = "This is my string"

let replaced = test.stringByReplacingOccurrencesOfString(" ", withString: "+", options: nil, range: nil)
17
répondu jaumard 2014-06-13 08:51:10

Swift 4:

let abc = "Hello world"

let result = abc.replacingOccurrences(of: " ", with: "_", 
    options: NSString.CompareOptions.literal, range:nil)

print(result :\(result))

sortie:

result : Hello_world
13
répondu Manish Bisht 2018-01-10 06:06:22

Une Swift 3 de la solution le long de la lignes de Sunkas:

extension String {
    mutating func replace(_ originalString:String, with newString:String) {
        self = self.replacingOccurrences(of: originalString, with: newString)
    }
}

utiliser:

var string = "foo!"
string.replace("!", with: "?")
print(string)

sortie:

foo?
8
répondu Josh Adams 2016-10-23 22:38:46

j'utilise cette extension:

extension String {

    func replaceCharacters(characters: String, toSeparator: String) -> String {
        let characterSet = NSCharacterSet(charactersInString: characters)
        let components = self.componentsSeparatedByCharactersInSet(characterSet)
        let result = components.joinWithSeparator("")
        return result
    }

    func wipeCharacters(characters: String) -> String {
        return self.replaceCharacters(characters, toSeparator: "")
    }
}

Utilisation:

let token = "<34353 43434>"
token.replaceCharacters("< >", toString:"+")
7
répondu Ramis 2015-10-14 08:30:47

catégorie qui modifie une chaîne mutable existante:

extension String
{
    mutating func replace(originalString:String, withString newString:String)
    {
        let replacedString = self.stringByReplacingOccurrencesOfString(originalString, withString: newString, options: nil, range: nil)
        self = replacedString
    }
}

utiliser:

name.replace(" ", withString: "+")
4
répondu Sunkas 2016-03-14 08:37:17

solution Swift 3 basée sur réponse de Ramis :

extension String {
    func withReplacedCharacters(_ characters: String, by separator: String) -> String {
        let characterSet = CharacterSet(charactersIn: characters)
        return components(separatedBy: characterSet).joined(separator: separator)
    }
}

a essayé de trouver un nom de fonction approprié selon la convention de nommage Swift 3.

3
répondu SoftDesigner 2017-05-23 12:10:41

Voici L'exemple pour Swift 3:

var stringToReplace = "This my string"
if let range = stringToReplace.range(of: "my") {
   stringToReplace?.replaceSubrange(range, with: "your")
} 
2
répondu Övünç Metin 2016-10-20 07:57:43

Voici une extension pour un in-place occurrences remplacer la méthode sur String , qui n'est pas une copie inutile et faire tout en place:

extension String {
    mutating func replaceOccurrences(of target: String, with replacement: String, options: String.CompareOptions = [], locale: Locale? = nil) {
        var range: Range<String.Index>?
        repeat {
            range = self.range(of: source, options: options, range: range.map { "151900920".lowerBound..<self.endIndex }, locale: locale)
            if let range = range {
                self.replaceSubrange(range, with: new)
            }
        } while range != nil
    }
}

(la méthode signature imite également la signature de la méthode intégrée String.replacingOccurrences() )

Peut être utilisé de la manière suivante:

var string = "this is a string"
string.replaceOccurrences(of: " ", with: "_")
print(string) // "this_is_a_string"
1
répondu Stéphane Copin 2017-07-05 12:50:51

si vous ne voulez pas utiliser L'objectif-c NSString méthodes, vous pouvez juste utiliser split et join :

var string = "This is my string"
string = join("+", split(string, isSeparator: { "151900920" == " " }))

split(string, isSeparator: { "151940920" == " " }) retourne un tableau de cordes ( ["This", "is", "my", "string"] ).

join joint ces éléments avec un + , résultant en la sortie désirée: "This+is+my+string" .

0
répondu Aaron Brager 2015-05-18 14:00:02

j'ai mis en œuvre cette fonction très facile:

func convap (text : String) -> String {
    return text.stringByReplacingOccurrencesOfString("'", withString: "''")
}

pour que vous puissiez écrire:

let sqlQuery = "INSERT INTO myTable (Field1, Field2) VALUES ('\(convap(value1))','\(convap(value2)')
0
répondu Blasco73 2016-05-18 09:16:04

je pense que Regex est le moyen le plus flexible et solide:

var str = "This is my string"
let regex = try! NSRegularExpression(pattern: " ", options: [])
let output = regex.stringByReplacingMatchesInString(
    str,
    options: [],
    range: NSRange(location: 0, length: str.characters.count),
    withTemplate: "+"
)
// output: "This+is+my+string"
0
répondu duan 2016-08-31 03:29:44

extension Swift:

extension String {

    func stringByReplacing(replaceStrings set: [String], with: String) -> String {
        var stringObject = self
        for string in set {
            stringObject = self.stringByReplacingOccurrencesOfString(string, withString: with)
        }
        return stringObject
    }

}

continuez et utilisez-le comme let replacedString = yorString.stringByReplacing(replaceStrings: [" ","?","."], with: "+")

la vitesse de la fonction est quelque chose dont je peux difficilement être fier, mais vous pouvez passer un tableau de String en un seul passage pour faire plus d'un remplacement.

0
répondu Juan Boero 2016-10-03 22:42:05