it-swarm.com.de

Gibt es eine Möglichkeit, Zeichen in Swift String zu ersetzen?

Ich suche nach einer Möglichkeit, Zeichen in einem Swift String zu ersetzen.

Beispiel: "This is my string"

Ich möchte mit + ersetzen, um zu erhalten: "This+is+my+string".

Wie kann ich das erreichen?

430
user3332801

Diese Antwort wurde aktualisiert für Swift 4. Wenn Sie noch Swift 1, 2 oder 3 verwenden, lesen Sie den Revisionsverlauf.

Sie haben mehrere Möglichkeiten. Sie können wie von @jaumard vorgeschlagen vorgehen und replacingOccurrences() verwenden.

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

Und wie von @cprcrack unten angegeben, sind die Parameter options und range optional. Wenn Sie also keine Zeichenfolgenvergleichsoptionen oder einen Bereich angeben möchten, in dem die Ersetzung ausgeführt werden soll, benötigen Sie nur die folgenden .

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

Wenn die Daten in einem bestimmten Format wie diesem vorliegen und Sie nur Trennzeichen ersetzen, können Sie die Zeichenfolge mit components() in ein Array aufteilen und anschließend die Funktion join() verwenden um sie mit einem bestimmten Trennzeichen wieder zusammenzufügen.

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

Oder wenn Sie nach einer schnelleren Lösung suchen, die keine API von NSString verwendet, können Sie diese verwenden.

let aString = "Some search text"

let replaced = String(aString.map {
    $0 == " " ? "+" : $0
})
834
Mick MacCallum

Sie können dies verwenden:

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

Wenn Sie diese Erweiterungsmethode an einer beliebigen Stelle in Ihrem Code hinzufügen:

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)
    }
}
62
whitneyland

Swift 3, Swift 4, Swift 5 Lösung

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: "+")
49
Ben Sullivan

Hast du das getestet:

var test = "This is my string"

let replaced = test.stringByReplacingOccurrencesOfString(" ", withString: "+", options: nil, range: nil)
18
jaumard

Swift 4:

let abc = "Hello world"

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

print(result :\(result))

Ausgabe:

result : Hello_world
13
Garine

Ich benutze diese Erweiterung:

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: "")
    }
}

Verwendungszweck:

let token = "<34353 43434>"
token.replaceCharacters("< >", toString:"+")
8
Ramis

Eine Swift 3-Lösung im Sinne von Sunkas:

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

Verwenden:

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

Ausgabe:

foo?
8
Josh Adams

Eine Kategorie, die eine vorhandene veränderbare Zeichenfolge ändert:

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

Verwenden:

name.replace(" ", withString: "+")
6
Sunkas

Swift 3 Lösung basierend auf Ramis 'Antwort :

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

Es wurde versucht, einen geeigneten Funktionsnamen gemäß der Namenskonvention Swift 3 zu finden.

4
SoftDesigner

Dies ist in Swift 4.2 einfach. Verwenden Sie einfach replacingOccurrences(of: " ", with: "_") zum Ersetzen

var myStr = "This is my string"
let replaced = myStr.replacingOccurrences(of: " ", with: "_")
print(replaced)
1
Tariqul

Hier ist das Beispiel für Swift 3:

var stringToReplace = "This my string"
if let range = stringToReplace.range(of: "my") {
   stringToReplace?.replaceSubrange(range, with: "your")
} 
1
Övünç Metin

Swift extension:

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
    }

}

Mach weiter und benutze es wie let replacedString = yorString.stringByReplacing(replaceStrings: [" ","?","."], with: "+")

Die Geschwindigkeit der Funktion ist etwas, auf das ich kaum stolz sein kann, aber Sie können eine Reihe von String in einem Durchgang übergeben, um mehr als einen Ersatz vorzunehmen.

0
Juan Boero

Mir ist weniger passiert, ich möchte nur (ein Wort oder ein Zeichen) in String ändern.

Also habe ich die Dictionary

  extension String{
    func replaceDictionary(_ dictionary: [String: String]) -> String{
          var result = String()
          var i = -1
          for (of , with): (String, String)in dictionary{
              i += 1
              if i<1{
                  result = self.replacingOccurrences(of: of, with: with)
              }else{
                  result = result.replacingOccurrences(of: of, with: with)
              }
          }
        return result
     }
    }

verwendungszweck

let mobile = "+1 (800) 444-9999"
let dictionary = ["+": "00", " ": "", "(": "", ")": "", "-": ""]
let mobileResult = mobile.replaceDictionary(dictionary)
print(mobileResult) // 001800444999
0
amin

Ich denke, Regex ist der flexibelste und solideste Weg:

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
duan

Ich habe diese sehr einfache Funktion implementiert:

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

So können Sie schreiben:

let sqlQuery = "INSERT INTO myTable (Field1, Field2) VALUES ('\(convap(value1))','\(convap(value2)')
0
Blasco73

Wenn Sie die Objective-C NSString -Methoden nicht verwenden möchten, können Sie einfach split und join verwenden:

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

split(string, isSeparator: { $0 == " " }) gibt ein Array von Strings zurück (["This", "is", "my", "string"]).

join verbindet diese Elemente mit einem +, was zur gewünschten Ausgabe führt: "This+is+my+string".

0
Aaron Brager