How do you trim whitespace from the start and end of a string?
trim " abc " => "abc"
Edit:
Ok, let me be a little clearer. I did not understand that string literals were treated so differently from Strings.
I would like to do this:
import qualified Data.Text as T let s :: String = " abc " in T.strip s
Is this possible in Haskell? I am using -XOverloadedStrings but that appears only to work for literals.
String result = str. trim(); The trim() method will remove both leading and trailing whitespace from a string and return the result.
Haskell Language Data.strip removes whitespace from the start and end of a Text value. stripStart removes whitespace only from the start. stripEnd removes whitespace only from the end. filter can be used to remove whitespace, or other characters, from the middle.
trim() method removes the leading and trailing spaces present in the string.
The trim() method in Java String is a built-in function that eliminates leading and trailing spaces. The Unicode value of space character is '\u0020'. The trim() method in java checks this Unicode value before and after the string, if it exists then removes the spaces and returns the omitted string.
If you have serious text processing needs then use the text
package from hackage:
> :set -XOverloadedStrings > import Data.Text > strip " abc " "abc"
If you're too stubborn to use text
and don't like the inefficiency of the reverse method then perhaps (and I mean MAYBE) something like the below will be more efficient:
import Data.Char trim xs = dropSpaceTail "" $ dropWhile isSpace xs dropSpaceTail maybeStuff "" = "" dropSpaceTail maybeStuff (x:xs) | isSpace x = dropSpaceTail (x:maybeStuff) xs | null maybeStuff = x : dropSpaceTail "" xs | otherwise = reverse maybeStuff ++ x : dropSpaceTail "" xs > trim " hello this \t should trim ok.. .I think .. \t " "hello this \t should trim ok.. .I think .."
I wrote this on the assumption that the length of spaces would be minimal, so your O(n) of ++
and reverse
is of little concern. But once again I feel the need to say that if you actually are concerned about the performance then you shouldn't be using String
at all - move to Text
.
EDIT making my point, a quick Criterion benchmark tells me that (for a particularly long string of words with spaces and ~200 pre and post spaces) my trim takes 1.6 ms, the trim using reverse takes 3.5ms, and Data.Text.strip
takes 0.0016 ms...
From: http://en.wikipedia.org/wiki/Trim_(programming)#Haskell
import Data.Char (isSpace) trim :: String -> String trim = f . f where f = reverse . dropWhile isSpace
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With