Swift:替换字符串中的字符 - 不使用stringByReplacingOccurrencesOfString

4

好的,假设我有一个像 String 这样的字符串。

let myString = "my string: hello"

我想把“:”替换为“,”���我已经做到了这一点:

let characters = map(Array(myString), {$0 == ":" ? "," : $0})

这将返回一个MapCollectionView<Array<Character>, Character>。是否有一种简单的方法将其转换回String


有没有特别的原因不使用 stringByReplacingOccurrencesOfString? - Teejay
1
除了好奇心外,没有任何东西。 - Ashley Mills
3个回答

4
这个怎么样?通过使用“减少”运算符将所有字符组合成字符串:+
let str = Array(characters).reduce("", combine: +)
println(str)
// Output: my string, hello
< p > < em >更新:另一种(可能更好的)解决方案:

var str = ""
str.extend(characters)

使用extend(),可以在没有中间Array的情况下进行字符串替换:
let myString = "my string: hello" as String
var myNewString = ""
myNewString.extend(map(myString.generate(), {$0 == ":" ? "," : $0} ))

1
@AshleyMills:不用谢!- 不过看看更新内容,也许你也可以用得上。 - Martin R

2
感谢Martin R的回答,我将我的代码简化为:
let myString = "my string: hello" as String
let myNewString = Array(myString).reduce("") { $0 + (String($1) == ":" ? "," : String($1)) }

更新

从Xcode 6.2 beta版本开始,以下内容现在可以正常工作:

let myString = "my string: hello"
let result = String(map(Array(myString)) {$0 == ":" ? "," : $0})

// Output: my string, hello

0

如果想要找到你想要的子字符串(也可以是单词),然后替换它们,怎么办呢:

var aString = "Replace the letter e with *"

import Foundation
while let range: Range<String.Index> =  aString.rangeOfString("e") {
    aString.replaceRange(range, with: "*")
}

适用于Xcode 7.0.1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接