说我有一个字符串,我想改变第一个" a"在那个字符串中" e"为了得到正确的拼写。
let animal = "elaphant"
使用stringByReplacingOccurrencesOfString()
会改变每个" a"在该字符串中的" e",返回:
elephent
我正在尝试获取第一个" a"的索引。然后使用replaceRange()
替换它,如下所示:
let index = animal.characters.indexOf("a")
let nextIndex = animal.startIndex.distanceTo(index!)
animal = animal.replaceRange(animal.startIndex.advancedBy(nextIndex)..<animal.startIndex.advancedBy(1), with: "e")
但是,此代码给出了以下错误:
Cannot assign value of type '()' to type 'String'
我一直试图找到一种方法将nextIndex转换为Int
,但我觉得我的整个方法都错了。帮助
答案 0 :(得分:7)
这就是你想要做的:
var animal = "elaphant"
if let range = animal.rangeOfString("a") {
animal.replaceRange(range, with: "e")
}
rangeOfString
将搜索所提供的子字符串的第一个匹配项,如果找到该子字符串,它将返回一个可选范围,否则它将返回nil。
我们需要打开可选项,最安全的方法是使用if let
语句,因此我们将范围分配给常量range
。
replaceRange
会按照建议执行,在这种情况下,我们需要animal
为var
。
答案 1 :(得分:3)
更新
Swift 4或更高版本
var animal = "elaphant"
if let index = animal.index(of: "a") {
animal.replaceRange(index...index, with: "e")
}
答案 2 :(得分:0)
在游乐场测试:
var animal = "elaphant"
if let range = animal.rangeOfString("a") {
animal.replaceRange(range, with: "e")
}
print (animal)
答案 3 :(得分:0)
Swift4
var animal = "elaphant"
if let index = animal.index(of: "a") {
animal.replaceSubrange(index...index, with: "e")
}
print (animal) // elephant