有什么方法可以替换Swift String上的字符吗?

use*_*801 442 string ios swift

我正在寻找一种方法来替换Swift中的字符String.

例: "This is my string"

我想,以取代 with +获得: "This+is+my+string".

我怎样才能做到这一点?

Mic*_*lum 855

此答案已针对Swift 4进行了更新.如果您仍在使用Swift 1,2或3,请查看修订历史记录.

你有几个选择.您可以像@jaumard建议和使用那样做replacingOccurrences()

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

并且如下面的@cprcrack所述,optionsrange参数是可选的,因此如果您不想指定字符串比较选项或范围来进行替换,则只需要以下内容.

let aString = "This is my string"
let newString = aString.replacingOccurrences(of: " ", with: "+")
Run Code Online (Sandbox Code Playgroud)

或者,如果数据是这样的特定格式,您只需要替换分隔字符,您可以使用components()将字符串分解为数组,然后您可以使用该join()函数将它们与指定的分隔符一起放回.

let toArray = aString.components(separatedBy: " ")
let backToString = toArray.joined(separator: "+")
Run Code Online (Sandbox Code Playgroud)

或者,如果您正在寻找更多不使用NSString API的Swifty解决方案,您可以使用它.

let aString = "Some search text"

let replaced = String(aString.map {
    $0 == " " ? "+" : $0
})
Run Code Online (Sandbox Code Playgroud)

  • **选项**和**范围**参数是可选的 (9认同)
  • 对于在Swift 2中使用`stringByReplacingOccurrencesOfString`的问题,你需要`import Foundation`才能使用该方法. (7认同)

whi*_*and 64

你可以用这个:

let s = "This is my string"
let modified = s.replace(" ", withString:"+")    
Run Code Online (Sandbox Code Playgroud)

如果您在代码中的任何位置添加此扩展方法:

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

斯威夫特3:

extension String
{
    func replace(target: String, withString: String) -> String
    {
        return self.replacingOccurrences(of: target, with: withString, options: NSString.CompareOptions.literal, range: nil)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我不会将函数命名为“替换”,因为这表明它会改变变量。使用与 Apple 相同的语法。将其称为“replaceing(_:withString:)”使其更加清晰。未来的变异“替换”功能也会在命名上发生冲突。 (2认同)

Ben*_*van 52

Swift 3,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: "+")
Run Code Online (Sandbox Code Playgroud)


Jay*_*ant 19

var str = "This is my string"

print(str.replacingOccurrences(of: " ", with: "+"))
Run Code Online (Sandbox Code Playgroud)

输出是

This+is+my+string
Run Code Online (Sandbox Code Playgroud)


jau*_*ard 18

你测试过这个:

var test = "This is my string"

let replaced = test.stringByReplacingOccurrencesOfString(" ", withString: "+", options: nil, range: nil)
Run Code Online (Sandbox Code Playgroud)


小智 13

斯威夫特4:

let abc = "Hello world"

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

print(result :\(result))
Run Code Online (Sandbox Code Playgroud)

输出:

result : Hello_world
Run Code Online (Sandbox Code Playgroud)


Ram*_*mis 8

我正在使用此扩展程序:

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: "")
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

let token = "<34353 43434>"
token.replaceCharacters("< >", toString:"+")
Run Code Online (Sandbox Code Playgroud)


Jos*_*ams 8

Sunkas的Swift 3解决方案:

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

使用:

var string = "foo!"
string.replace("!", with: "?")
print(string)
Run Code Online (Sandbox Code Playgroud)

输出:

foo?
Run Code Online (Sandbox Code Playgroud)


Sun*_*kas 7

修改现有可变字符串的类别:

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

使用:

name.replace(" ", withString: "+")
Run Code Online (Sandbox Code Playgroud)


ami*_*min 6

我身上发生的事情较少,我只是想改变(一个词或一个字符)String

所以我用了Dictionary

  extension String{
    func replace(_ 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
     }
    }
Run Code Online (Sandbox Code Playgroud)

用法

let mobile = "+1 (800) 444-9999"
let dictionary = ["+": "00", " ": "", "(": "", ")": "", "-": ""]
let mobileResult = mobile.replace(dictionary)
print(mobileResult) // 001800444999
Run Code Online (Sandbox Code Playgroud)


Sof*_*ner 5

基于Ramis 答案的Swift 3 解决方案:

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

试图根据 Swift 3 命名约定提出一个合适的函数名称。