通过将空格填充到指定长度来使字符串居中
center a string by padding spaces up to a specified length
我有一个名称向量,如下所示:
x <- c("Marco", "John", "Jonathan")
我需要通过添加前导空格和尾随空格来设置格式,使名称以 10 个字符的字符串居中:
> output
# [1] " Marco " " John " " Jonathan "
我希望有一个比使用 paste
、rep
和计算 nchar
更简单的解决方案? (也许 sprintf
但我不知道怎么做)。
这是一个 sprintf()
解决方案,它使用简单的辅助向量 f
来确定低边宽度。然后我们可以使用 *
字符将宽度插入到我们的格式中,使用右侧的 ceiling()
来说明名称中的奇数个字符。由于我们的最大字符宽度为 10,因此每个超过 10 个字符的名称将保持不变,因为我们使用 pmax()
.
调整这些宽度
f <- pmax((10 - nchar(x)) / 2, 0)
sprintf("%-*s%s%*s", f, "", x, ceiling(f), "")
# [1] " Marco " " John " " Jonathan " "Christopher"
数据:
x <- c("Marco", "John", "Jonathan", "Christopher")
最终,我知道它不是同一种语言,但值得注意的是 Python(而不是 R)有一个内置的方法来做那,它被称为居中字符串:
example = "John"
example.center(10)
#### ' john '
奇数右边加号,让你输入你选择的填充字符。虽然它没有矢量化。
我有一个名称向量,如下所示:
x <- c("Marco", "John", "Jonathan")
我需要通过添加前导空格和尾随空格来设置格式,使名称以 10 个字符的字符串居中:
> output
# [1] " Marco " " John " " Jonathan "
我希望有一个比使用 paste
、rep
和计算 nchar
更简单的解决方案? (也许 sprintf
但我不知道怎么做)。
这是一个 sprintf()
解决方案,它使用简单的辅助向量 f
来确定低边宽度。然后我们可以使用 *
字符将宽度插入到我们的格式中,使用右侧的 ceiling()
来说明名称中的奇数个字符。由于我们的最大字符宽度为 10,因此每个超过 10 个字符的名称将保持不变,因为我们使用 pmax()
.
f <- pmax((10 - nchar(x)) / 2, 0)
sprintf("%-*s%s%*s", f, "", x, ceiling(f), "")
# [1] " Marco " " John " " Jonathan " "Christopher"
数据:
x <- c("Marco", "John", "Jonathan", "Christopher")
最终,我知道它不是同一种语言,但值得注意的是 Python(而不是 R)有一个内置的方法来做那,它被称为居中字符串:
example = "John"
example.center(10)
#### ' john '
奇数右边加号,让你输入你选择的填充字符。虽然它没有矢量化。