轨道
/
Elm
Elm
/
练习
/
一尘不染
一尘不染

一尘不染

学习练习

简介

字符串

在 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 函数传入空字符串,则应返回空字符串。

1. 将空格替换为下划线

实现一个 clean1 函数,将所有空格替换为下划线。开头和结尾的空格也不例外。

clean1 "my   Id"
    --> "my___Id"

2. 将控制字符替换为大写字符串 "[CTRL]"

实现 clean2,完成上一个函数的所有功能,并将常见的控制字符(\n、\t 和 \r)替换为字符串 "[CTRL]"。

clean2 "my\nId"
    --> "my[CTRL]Id",

3. 将 kebab-case 转换为 camelCase

实现 clean3,完成上一个函数的所有功能,并将 kebab-case 转换为 camelCase。

clean3 "à-ḃç"
    --> "àḂç"

4. 省略数字

实现 clean4,完成上一个函数的所有功能,并省略所有数字。

clean4 "123"
    --> ""

5. 省略小写希腊字母

最后,实现 clean,完成上一个函数的所有功能,并省略 'α' 到 'ω' 范围内的所有希腊字母。

clean "My Οβιεγτ Finder"
    --> "My_Ο_Finder"
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Elm Exercism

准备好开始 一尘不染 了吗?

注册 Exercism,借助 28 个概念110 个练习 和真人导师指导,学习并掌握 Elm,全部免费。