swift - 填充用于打印的快速字符串

标签 swift string padding

我正在尝试打印所有填充到相同宽度的字符串列表。

在 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.1substring方法已弃用,有许多新方法可以获取子字符串。 prefix , suffix或订阅 StringRange<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/

相关文章:

swift - 我们可以将 willSet 和 didSet 与 getter 和 setter 一起使用吗?

java - 简化代码 - 检查字符串中的第一个字符以匹配字符列表

html - <li> 不移动带填充的子弹

HTML 列表 - 宽度问题

java - 可用的填充方案是否符合 BSI 指南

ios - 通用 UITableViewCell 标识符

swift - Swift 中的单元测试 URL 参数

轻松替换 R 中的多个单词; str_replace_all 给出两个对象长度不相等的错误

swift - 将多个参数添加到 UITableView 中的目标 #selector

Java检查字符串中的所有字符是否存在于给定的字符串数组中