2008年10月26日日曜日

Haskell で文字列の分割と結合

文字列をリストへ分割

改行で区切るなら、

lines :: String -> [String]

空白で区切るなら、

words :: String -> [String]

特定の文字列で区切るなら正規表現を使って、( Text.Regex )

splitRegex :: Regex -> String -> [String]

import Text.Regex

main = do
  print $ lines "hoge\npiyo\nfuga"
  print $ words "hoge piyo fuga"

  print $ splitRegex (mkRegex ",") "hoge,piyo,fuga"
  print $ splitRegex (mkRegex "--") "hoge--piyo--fuga"

 

リストを文字列へ戻す

lines, words の接頭辞として `un’ をつける。

文字列でくっつけたい場合は、intercalate 。(cf. Haskell でリストの要素を join - List.Data の intersperse, intercalate)

import Data.List

css = ["hoge","piyo","fuga"]

main = do
  putStrLn $ unlines css
  putStrLn $ unwords css

  putStrLn $ intercalate "—" css

結果は、

hoge
piyo
fuga

hoge piyo fuga
hoge--piyo--fuga

単に文字列のリストをくっつけて、文字列にしたいだけなら concat 。文字列のリストは、文字のリストのリストであるため。

 

日本語

日本語を扱うときは、「Haskell で日本語表示 - utf8-string を利用して」 を参照。

 

関連記事