Strings & String Interpolation

5.1 String basics

val s = "Hello, Scala"
s.length                    // 12
s.toUpperCase, s.toLowerCase
s.substring(0, 5)           // "Hello"
s.split(", ")               // Array("Hello", "Scala")
s.contains("Sca"), s.startsWith("He"), s.endsWith("la")
s.replace("Scala", "World")
s.trim, s.strip
s.indexOf('S'), s.charAt(0), s(0)   // s(0) — apply method
s.reverse                   // via StringOps
s.capitalize
s.toList                    // List[Char]
s * 2                       // "Hello, ScalaHello, Scala"
s.isEmpty, s.nonEmpty, s.isBlank
s.filter(_.isUpper)         // "HS"
s.mkString("-")             // characters joined
"a,b,c".split(",").toList

5.2 Multi-line strings

val text = """Line one
             |Line two
             |Line three""".stripMargin

5.3 Interpolation

Custom interpolators:

val name = "Ann"; val age = 30; val pi = 3.14159

s"Hello, $name! Next year you'll be ${age + 1}."
f"Pi is approximately $pi%.2f, name: $name%10s"   // printf-style, type-checked
raw"No escapes: \n stays literal"
extension (sc: StringContext)
  def json(args: Any*): String = sc.s(args*).replace("'", "\"")

json"{'name': '$name'}"     // {"name": "Ann"}

5.4 StringBuilder

val sb = StringBuilder()
sb.append("a").append(1).append('c')
sb.toString   // "a1c"