66 votes

En Haskell, comment couper les espaces blancs du début et de la fin d'une chaîne de caractères ?

Comment couper les espaces blancs au début et à la fin d'une chaîne de caractères ?

trim "  abc " 

=>

"abc"

Edit :

Ok, laissez-moi être un peu plus clair. Je n'avais pas compris que les littéraux de chaîne étaient traités si différemment des chaînes de caractères.

J'aimerais le faire :

import qualified Data.Text as T
let s :: String = "  abc  "
in T.strip s

Est-ce possible en Haskell ? J'utilise -XOverloadedStrings mais cela ne semble fonctionner que pour les littéraux.

0voto

sommnium003 Points 1

Dans la lignée de ce que d'autres personnes ont suggéré, vous pouvez éviter d'avoir à inverser votre chaîne en utilisant :

import Data.Char (isSpace)

dropFromTailWhile _ [] = []
dropFromTailWhile p item
  | p (last items) = dropFromTailWhile p $ init items
  | otherwise      = items

trim :: String -> String
trim = dropFromTailWhile isSpace . dropWhile isSpace

-3voto

user3599138 Points 21

Une autre solution (std)

import System.Environment
import Data.Text

strip :: String -> IO String
strip = return . unpack . Data.Text.strip . pack

main = getLine >>= Main.strip >>= putStrLn

13 votes

Pourquoi voudriez-vous envelopper volontairement votre résultat en IO ?

4 votes

Envelopper inutilement le résultat dans une monade donne un mauvais exemple, ne le faites pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X