在 Elm 中,字符和字符串是文本表示的基础。
可以把字符串看作由字符组成的数组,List 模块里的大多数函数在 String 模块中都有对应的版本。
Char 类型用单引号表示单个 Unicode 字符,例如'a'。
Char 模块提供了一些谓词函数(Char -> Bool),用来判断字符的性质:isUpper、isLower、isAlpha 和 isAlphaNum。
该模块还提供了一些函数,用于转换字符,如 toUpper、toLower、toLocaleUpper、toLocaleLower,以及通过 toCode 和 fromCode 在字符与它的 Unicode 数值(Int)之间互相转换。
String 类型为高效的字符串操作提供了内置表示,可以表示任意 Unicode 字符序列,例如 "this is an Elm string."
多行字符串用三个双引号表示,其中可以包含未转义的引号和换行。
"""
This is a multiline string.
All line-breaks and whitespace,
are preserved.
"""
String 模块包含下表汇总的所有函数。
以下是一些最常用的函数:
cons : Char -> String -> String会在字符串开头添加一个字符。
cons 'T' "he truth is out there"
--> "The truth is out there"
(++): String -> String -> String会把两个字符串拼接起来。
"butter" ++ "fly"
--> "butterfly"
split : String -> String -> List String会按给定的分隔符把字符串拆分成字符串数组。
split ";" "cat;dog;cow"
--> ["cat", "dog", "cow"]
join : String -> List String -> String会用给定的分隔符把一个字符串数组拼接起来。
join "a" ["H", "w", "ii", "n"]
--> "Hawaiian"
replace : String -> String -> String -> String会替换所有出现的给定子串。
replace "Hello" "Goodbye cruel" "Hello world."
--> "Goodbye cruel world."
length : String -> Int返回字符串中字符的个数。
length "Hello world."
--> 12
toInt : String -> Maybe Int会尝试把字符串转换成 Just Int,对于格式不正确的字符串则返回 Nothing。
toInt "-42"
--> Just -42
contains : String -> String -> Bool检查第二个字符串是否包含第一个字符串。
contains "the" "theory"
--> True
map : (Char -> Char) -> String -> String会把给定的函数应用到字符串中的每个 Char。
注意,传入的函数必须是从 Char 到 Char 的映射。
map (\c -> if c == '/' then '.' else c) "a/b/c"
--> "a.b.c"
| 操作 | 子串 | 检查 | 转换 | 高阶 |
|---|---|---|---|---|
reverse |
slice |
length |
toInt |
map |
repeat |
left |
isEmpty |
fromInt |
filter |
replace |
right |
contains |
toFloat |
foldl |
append |
dropLeft |
startsWith |
fromFloat |
foldr |
concat |
dropRight |
indexes |
toList |
any |
split |
fromList |
all |
||
join |
fromChar |
|||
words |
||||
lines |
||||
cons |
||||
uncons |
在这个练习中,你将实现一部分辅助函数,帮助开发者清理标识符名称。
在这 5 个任务中,你将逐步构建出 clean 函数。
合法的标识符由零个或多个字母和下划线组成。
如果向 clean 函数传入空字符串,则应返回空字符串。
实现一个 clean1 函数,将所有空格替换为下划线。开头和结尾的空格也不例外。
clean1 "my Id"
--> "my___Id"
实现 clean2,完成上一个函数的所有功能,并将常见的控制字符(\n、\t 和 \r)替换为字符串 "[CTRL]"。
clean2 "my\nId"
--> "my[CTRL]Id",
实现 clean3,完成上一个函数的所有功能,并将 kebab-case 转换为 camelCase。
clean3 "à-ḃç"
--> "àḂç"
实现 clean4,完成上一个函数的所有功能,并省略所有数字。
clean4 "123"
--> ""
最后,实现 clean,完成上一个函数的所有功能,并省略 'α' 到 'ω' 范围内的所有希腊字母。
clean "My Οβιεγτ Finder"
--> "My_Ο_Finder"