将所有行设置为相同的宽度(添加空格)

时间:2018-07-10 12:07:22

标签: scala text grid

我目前正在尝试根据文本制作网格。如果我有这样的文字:

AAAAA  \n
BBBBBBB\n
EEEE   \n
CCCCCC \n

我希望它像这样:

 private def fixText(lines: Vector[String]): Vector[String] = {
    val fixedLines = for(i <- lines) yield {
      val addSpaces = " " * (lines.maxBy(_.length).length - i.length)
      i + addSpaces
    }
    fixedLines
  }

我做了这个简单的功能,但是我认为这绝对不是走的路(太长了):

{{1}}

是否可以在Scala中仅一行完成此操作?

1 个答案:

答案 0 :(得分:2)

知道:

"aaa".padTo(5, 'A') // aaaAA

您可以这样做:

val input = "AAAAA\nBBBBBBB\nEEEE\nCCCCCC\n".split("\n")
val max = input.map(_.size).max // BBBBBBB => 7
input.map(s => s.padTo(max, ' ')).mkString("\n")

,它首先在分割行后获得元素的最大长度。然后在重新加入之前,在所有行上填充适当数量的字符。

不完全是一行,而是单线可能会通过多次计算而导致性能损失:

val input = "AAAAA\nBBBBBBB\nEEEE\nCCCCCC\n"
input.split("\n").map(s => s.padTo(input.split("\n").map(_.size).max, ' ')).mkString("\n")