Trimming strings in Scala

To trim the start and ending character in a string, use a mix of drop and dropRight:

scala> " hello,".drop(1).dropRight(1)

res4: String = hello

The drop call removes the first character, dropRight removes the last. Note that this isn't "smart" like trim is. If you don't have any extra character at the start of "hello,", you will trim it to "ello". If you need something more complicated, regex replacement is probably the answer.


Try

val str = "  foo  "
str.trim

and have a look at the documentation. If you need to get rid of the , character, too, you could try something like:

str.stripPrefix(",").stripSuffix(",").trim

Another way to clean up the front-end of the string would be

val ignoreable = ", \t\r\n"
str.dropWhile(c => ignorable.indexOf(c) >= 0)

which would also take care of strings like ",,, ,,hello"

And for good measure, here's a tiny function, which does it all in one sweep from left to right through the string:

def stripAll(s: String, bad: String): String = {

    @scala.annotation.tailrec def start(n: Int): String = 
        if (n == s.length) ""
        else if (bad.indexOf(s.charAt(n)) < 0) end(n, s.length)
        else start(1 + n)

    @scala.annotation.tailrec def end(a: Int, n: Int): String =
        if (n <= a) s.substring(a, n)
        else if (bad.indexOf(s.charAt(n - 1)) < 0) s.substring(a, n)
        else end(a, n - 1)

   start(0)
}

Use like

stripAll(stringToCleanUp, charactersToRemove)

e.g.,

stripAll("  , , , hello , ,,,, ", " ,") => "hello"

Tags:

String

Scala