scala图形拼接

import collection.mutable.ArrayBuffer
class ASCIIArt(str:String){
  val arr:ArrayBuffer[ArrayBuffer[String]] = new ArrayBuffer[ArrayBuffer[String]]()
  if (str != null && !str.trim.eq("")){
    str.split("[\r\n]+").foreach{
      line =>
      val s = new ArrayBuffer[String]()
      s += line
      arr += s
    }
  }
  def this(){
    this("")
  }
  def +(other:ASCIIArt):ASCIIArt={ //图案横向拼接
    val art = new ASCIIArt()
    val length = if (this.arr.length >= other.arr.length) this.arr.length else other.arr.length
    for(i <- 0 until length){
      val s = new ArrayBuffer[String]()
      val thisArr:ArrayBuffer[String] = if (i < this.arr.length) this.arr(i) else {var temp=new ArrayBuffer[String]();temp += " "*10;temp}
      val otherArr:ArrayBuffer[String] = if (i < other.arr.length) other.arr(i) else {var temp=new ArrayBuffer[String]();temp += " "*11;temp}
      thisArr.foreach(s += _)
      otherArr.foreach(s += _)
      art.arr += s
    }
    art
  }

  def *(other:ASCIIArt):ASCIIArt={ //图案纵向拼接,且纵向的优先级高于横向的优先级(即*的优先级高于+的优先级)
    val art = new ASCIIArt()
    this.arr.foreach(art.arr += _)
    other.arr.foreach(art.arr += _)
    art
  }

  override def toString()={
    var ss:String = ""
    arr.foreach{
      ss += _.mkString(" ") + "\n"
    }
    ss
  }
}
object ASCIIArt_ex extends App{
  val a = new ASCIIArt("""   /\_/\  
                         |  ( ' ' ) 
                         |  (  -  ) 
                         |   | | |  
                         |  (__|__) 
                         |""".stripMargin)
  val b = new ASCIIArt("""   -----  
                        | / Hello \ 
                        |<  Scala | 
                        | \ Coder / 
                        |   -----   
                        |""".stripMargin)
  println(a + b * b * b)
  println(a + (a + b) * b * b)
  println(a * b + a)
}

效果如下:

   /\_/\      -----
  ( ' ' )   / Hello \
  (  -  )  <  Scala |
   | | |    \ Coder /
  (__|__)     -----
              -----
            / Hello \
           <  Scala |
            \ Coder /
              -----
              -----
            / Hello \
           <  Scala |
            \ Coder /
              -----

   /\_/\      /\_/\      -----
  ( ' ' )    ( ' ' )   / Hello \
  (  -  )    (  -  )  <  Scala |
   | | |      | | |    \ Coder /
  (__|__)    (__|__)     -----
              -----
            / Hello \
           <  Scala |
            \ Coder /
              -----
              -----
            / Hello \
           <  Scala |
            \ Coder /
              -----

   /\_/\      /\_/\
  ( ' ' )    ( ' ' )
  (  -  )    (  -  )
   | | |      | | |
  (__|__)    (__|__)
   -----
 / Hello \
<  Scala |
 \ Coder /
   -----


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值