Swift:替换字符串中单个字符的简单方法?



我想替换字符串的第一个字符,并让它像这样工作:

s.replaceSubrange(Range(NSMakeRange(0,1),in:s)!, with:".")

我想知道是否有更简单的方法可以达到相同的结果?

[编辑]

在 Swift 编程语言中获取字符串的第 n 个字符不提供可变的子字符串。它需要编写一个 String 扩展,这在尝试缩短代码时并没有真正的帮助。

要替换第一个字符,您可以使用StringdropFirst()连接:

var s = "😃hello world!"
s = "." + s.dropFirst()
print(s)

结果:

.hello world!

注意:如果String为空,这不会崩溃;它只会创建一个带有替换字符的String

字符串在 Swift 中的工作方式与许多其他语言非常不同。在 Swift 中,字符不是单个字节,而是单个视觉元素。这在处理表情符号等多字节字符时非常重要(请参阅:为什么 Swift 字符串中的表情符号👧 👩 👩 👦字符处理得如此奇怪?

如果您确实想在问题注释中扩展时将字符串的单个随机字节设置为任意值,则需要退出字符串抽象并将数据用作缓冲区。由于各种安全功能,这在 Swift 中有点恶心,但它是可行的:

var input = "Hello, world!"
//access the byte buffer
var utf8Buffer = input.utf8CString
//replace the first byte with whatever random data we want
utf8Buffer[0] = 46 //ascii encoding of '.'
//now convert back to a Swift string
var output:String! = nil //buffer for holding our new target
utf8Buffer.withUnsafeBufferPointer { (ptr) in
//Load the byte buffer into a Swift string
output = String.init(cString: ptr.baseAddress!)
}
print(output!) //.ello, world!

最新更新