Erlang Central

Difference between revisions of "Trimming Blanks from String"

From ErlangCentral Wiki

(use the much-nicer form of a literal space character)
m (reverted spam...)
(5 intermediate revisions by 4 users not shown)

Revision as of 15:36, 14 June 2007


You need to ignore leading or trailing space in a string.


The string module to the rescue again, in the form of the strip command:

1> string:strip("   Some text   ").
"Some text"
2> string:strip("   Some text   ", left).
"Some text   "
3> string:strip("   Some text   ", right).
"   Some text"
4> string:strip("   Some text   ", both). 
"Some text"

Note that the default behavior of 'strip' is to remove spaces from both ends.

However, this solution only handles one type of character; only the '$\s' (space character) will typically be removed. What if you wish to remove all forms of whitespace?

One approach is to use the regular expression library to find (and replace) the unwanted spaces. This should be possible using a single expression and a back reference, but since the standard regular expression implementation seems to only support replacement, the following will work:

1> {_,S,_} = regexp:sub("  foo bar  ", "^[ \t]*", ""),  
2> regexp:sub(S, "[ \t]*$", "").
{ok,"foo bar",1}

Or as a function:


trim_whitespace(Input) ->
   {_,LS,_} = regexp:sub(Input, "^[ \t]*", ""),
   {_,RS,_} = regexp:sub(LS, "[ \t]*$", ""),

1> c('cookbook').                       
2> cookbook:trim_whitespace("  foo bar  ").
"foo bar"