Scala星号与字符串组合模式的对齐排版问题求解
问题原因
你当前固定在每行内容后加2个空格,没有适配不同行的内容长度差异,导致右侧星号无法对齐。此外split("\n")拆分字符串后会产生空元素,会额外输出不需要的空行。
解决方法
先过滤掉拆分后的空行,计算所有有效行的最大长度,再对每行内容左对齐补空格到最大长度即可,实现代码如下:
object task { def main(args: Array[String]) = { val mystring: Array[String] = Array("This\nis\nrandom\ntext\n\n") // 拆分字符串并过滤空行 val s = mystring.mkString.split("\n").filter(_.nonEmpty) // 计算最长内容的长度 val maxContentLen = s.map(_.length).max // 生成上下边框,总长度=最长内容长度 + 4(左右各1个空格+1个星号) val border = "*" * (maxContentLen + 4) println(border) for(element <- s) { // 内容左对齐补空格到最大长度,再拼接左右的星号和空格 println(s"* ${element.padTo(maxContentLen, ' ')} *") } println(border) } }
运行上述代码就能得到你期望的对齐输出效果,而且后续如果修改输入的字符串内容,也能自动适配长度保证边框对齐。
内容的提问来源于stack exchange,提问作者RedPutron
相关产品推荐
相关产品推荐

