【问题标题】:center a string by padding spaces up to a specified length通过将空格填充到指定长度来使字符串居中
【发布时间】:2017-06-23 21:40:16
【问题描述】:

我有一个名字向量,像这样:

x <- c("Marco", "John", "Jonathan")

我需要通过添加前导和尾随空格来格式化它,以便名称在 10 个字符的字符串中居中:

> output
# [1] "  Marco   " "   John    " " Jonathan "

我希望有一个比使用paste、rep 和计数nchar 更简单的解决方案? (也许是sprintf,但我不知道怎么做)。

【问题讨论】:

  • 这是一个复杂的:paste(sapply(nchar(x), function(n) paste(rep(" ", floor((10 - n)/2)), collapse = "")), x, sapply(nchar(x), function(n) paste(rep(" ", 10 - n - floor((10 - n)/2)), collapse = "")), sep = "")
  • @d.b 谢谢,您的解决方案确实有效(除非初始名称超过 10 个字符,否则会引发错误)。

标签: r string formatting printf string-formatting


【解决方案1】:

这是一个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")

【讨论】:

    【解决方案2】:

    最终,我知道它不是同一种语言,但值得注意的是,Python(而不是 R)有一个内置的方法可以做到这一点,它被称为居中字符串:

    example = "John"
    example.center(10)
    #### '   john   '
    

    它添加到奇数的右侧,并允许您输入您选择的填充字符。虽然它没有矢量化。

    【讨论】:

      猜你喜欢
      • 2021-11-30
      • 2013-12-17
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-31
      • 1970-01-01
      相关资源
      最近更新 更多