周围的Scala字符串

Kev*_*ing 1 string stringbuilder scala string-concatenation immutability

如果你在单个语句中执行某些操作,例如"abc"+ stringval +"abc",那么是一个不可变的字符串副本,或者两个(注意到abc和123在编译时是常量)

奖金回合:会使用像下面这样的StringBuilder或多或少的开销?

  def surround(s:String, ss:String):String = {
    val surrounded = new StringBuilder(s.length() + 2*ss.length(), s)
    surrounded.insert(0,ss)
    surrounded.append(ss)
    surrounded.mkString
  }
Run Code Online (Sandbox Code Playgroud)

还是有一种我不知道的更惯用的方式?

Nei*_*ssy 6

比串联具有更少的开销.但是示例中的插入效率不高.以下是一个更清洁,只使用追加效率.

def surround(s:String, ss:String) =
  new StringBuilder(s.length() + 2*ss.length(), ss).append(s).append(ss).mkString
Run Code Online (Sandbox Code Playgroud)