如何从字符串中间删除字符?迅捷4

时间:2019-06-21 00:09:46

标签: swift string

我正在尝试删除字符串中间的字符。

这就是我想做的

let index = 4
let str = "abcdefg"
let strRemoved = str.remove(at: index) //Removes only character at pos 4
print(strRemoved) //prints 'abcdfg'

2 个答案:

答案 0 :(得分:0)

不能。 String集合的索引不是Int,但是您可以实现自己的remove(at:)方法,该方法以Int作为参数。请注意,要从集合中删除元素,您需要将其声明为变量:


extension StringProtocol where Self: RangeReplaceableCollection {
    @discardableResult
    mutating func remove(at offset: Int) -> Element? {
        guard let index = index(startIndex, offsetBy: offset, limitedBy: endIndex) else { return nil }
        return remove(at: index)
    }
}

游乐场测试:

let index = 4
var abc = "abcdefg"

if let removedChar = abc.remove(at: index) { // Removes at pos 4
    print(removedChar) // prints 'e'
    print(abc) // prints 'abcdfg'
}

答案 1 :(得分:0)

让我们看一下如何从String的中间删除字符,该示例用例是从字符串中删除随机字母直到它为空。


方法1:使用String.remove(at:)删除字符

在这里,我们使用方法String.remove(at:)选择要删除的字符。不幸的是,String没有用Int编制索引,因此您需要提供一个String.Index值:

var str = "abcdefg"

while str.count > 0 {
    let randomIndex = Int.random(in: 0 ..< str.count)
    str.remove(at: str.index(str.startIndex, offsetBy: randomIndex))
    print(str)
}

输出:

abdefg
bdefg
befg
bfg
bf
f

方法2:使用prefix()dropFirst()来构建新的String

或者,您可以使用prefix()dropFirst()选择原始String的一部分来构建新的String。这两个方法都返回类型Substring,因此有必要在串联各部分后调用String()

var str = "abcdefg"

while str.count > 0 {
    let randomIndex = Int.random(in: 0 ..< str.count)
    str = String(str.prefix(randomIndex) + str.dropFirst(randomIndex + 1))
    print(str)
}

输出:

abcdeg
abcde
acde
acd
cd
c

方法3:将str变成[Character]

如果您要反复添加,删除和更改字符,请考虑将String变成[Character]。这更容易使用,因为[Character]可以用Int进行索引,并且您可以轻松地将名为[Character]的{​​{1}}转换为chars String

String(chars)

输出:

var str = "abcdefg"
var chars = Array(str)

while chars.count > 0 {
    let randomIndex = Int.random(in: 0 ..< chars.count)
    chars.remove(at: randomIndex)
    print(String(chars))
}