我正在尝试打印所有填充到相同宽度的字符串列表。
在 C 中,我会使用类似 printf("%40s", cstr),
的东西,其中 cstr 是 C 字符串。
在 Swift 中,我能想到的最好的是:
line += String(format: "%40s",string.cStringUsingEncoding(<someEncoding>))
有没有更好的办法?
最佳答案
在 Swift 3 中,您可以使用:
let str = "Test string"
let paddedStr = str.padding(toLength: 20, withPad: " ", startingAt: 0)
结果字符串:"Test string "
如果您需要向左填充文本(右对齐),您可以编写以下函数作为对String
的扩展。 :
extension String {
func leftPadding(toLength: Int, withPad character: Character) -> String {
let newLength = self.characters.count
if newLength < toLength {
return String(repeatElement(character, count: toLength - newLength)) + self
} else {
return self.substring(from: index(self.startIndex, offsetBy: newLength - toLength))
}
}
}
所以如果你写:
let str = "Test string"
let paddedStr = str.leftPadding(toLength: 20, withPad: " ")
结果字符串:" Test string"
在 Swift 4.1 中 substring
方法已弃用,有许多新方法可以获取子字符串。 prefix
, suffix
或订阅 String
用Range<String.Index>
.
对于之前的扩展,我们可以使用 suffix
方法来实现相同的结果。自 suffix
方法返回 String.SubSequence
, 它需要转换成 String
在被退回之前。
extension String {
func leftPadding(toLength: Int, withPad character: Character) -> String {
let stringLength = self.count
if stringLength < toLength {
return String(repeatElement(character, count: toLength - stringLength)) + self
} else {
return String(self.suffix(toLength))
}
}
}
关于swift - 填充用于打印的快速字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32338137/