我正在尝试删除字符串中间的一个字符。
这就是我想做的
let index = 4
let str = "abcdefg"
let strRemoved = str.remove(at: index) //Removes only character at pos 4
print(strRemoved) //prints 'abcdfg'发布于 2019-06-21 02:53:52
让我们看看如何从String中间删除一个字符,方法是查看一个示例用例,在这个示例中,我们从字符串中删除随机字母,直到字符串为空为止。
String.remove(at:)方法1:使用删除字符
这里,我们使用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)
}输出:
bfg bf
方法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 c
str方法3:将转换为
如果要重复添加、删除和更改字符,请考虑将String转换为[Character]。这要容易得多,因为[Character]可以使用Int进行索引,而且您可以轻松地将名为chars的[Character]转换为带有String(chars)的String。
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))
}输出:
acefg aceg aeg ae a
发布于 2019-06-21 01:35:29
不能。String集合的索引它不是Int,但是可以实现以Int作为参数的自己的remove(at:)方法。请注意,要从集合中删除元素,需要将其声明为变量:
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'
}https://stackoverflow.com/questions/56695330
复制相似问题