轨道
/
Crystal
Crystal
/
练习
/
高中恋人
高中恋人

高中恋人

学习练习

简介

String 有多个方法可以用来操作字符串。 这些方法都直接在字符串上调用,而且经常串联起来,对字符串执行多个操作。

下面列出了一些最常用的方法。 完整的方法列表请参阅 String API 文档。

String#upcase 与 String#downcase

upcase 方法返回一个新字符串,其中所有字符都转换为大写。

"hello".upcase
# => "HELLO"

downcase 方法返回一个新字符串,其中所有字符都转换为小写。

"HELLO".downcase
# => "hello"

String#sub 与 String#gsub

Crystal 提供了替换字符串部分内容的方法。 它们分别是 sub(substitution)和 gsub(global substitution)。

这些方法可以接受字符串、字符或正则表达式作为第一个实参,以及字符串或字符作为第二个实参。 第一个实参是要被替换的字符串部分,第二个实参是替换后的内容。 Char 和正则表达式将在后面的概念中介绍。

sub 方法会用第二个实参替换第一个实参第一次出现的位置。

"hello".sub("l", "r")
# => "herlo"

gsub 方法与 sub 的作用相同,但会用第二个实参替换第一个实参出现的所有位置。

"hello".gsub("l", "r")
# => "herro"

String#chomp 与 String#strip

chomp 和 strip 可以用来移除字符串中不需要的字符。

chomp 方法默认会移除字符串末尾的 \r、\n 或 \r\n 字符。 如果调用方法时传入了实参,它就会从字符串末尾移除给定的值。 前提是该值确实出现在字符串末尾。

"hello\n".chomp
# => "hello"

"hello".chomp("llo")
# => "he"

默认情况下,strip 方法会移除字符串开头和末尾的所有空白字符。 如果调用方法时传入了实参,它就会从字符串的开头和末尾移除该实参。 前提是该实参确实出现在字符串的开头或末尾。

" hello ".strip
# => "hello"

String#index

index 方法可以用来查找某个字符在字符串中的下标。 index 方法接受一个 String、Char 或正则表达式作为实参。 它还可以接受一个可选的第二个实参,用来指定从哪个下标开始搜索。 index 方法会返回实参第一次出现的下标。

"hello".index("l")
# => 2

"hello".index("l", 3)
# => 3

String#delete_at

可以使用 delete_at 方法从字符串中移除一个字符。 delete_at 方法接受一个下标作为实参,并移除该下标处的字符。

"hello".delete_at(0)
# => "ello"

"hello".delete_at(3)
# => "helo"

String#insert

可以使用 insert 方法在指定的下标处插入一个字符串。 insert 方法接受一个下标作为第一个实参,以及一个字符串作为第二个实参。 insert 方法会返回一个新字符串,第二个实参已插入到该下标处。

"hello".insert(0, "h")
# => "hhello"

"hello".insert(3, "l")
# => "helllo"

说明

在这个练习中,你要帮一对高中情侣在社交媒体上表达爱意,用他们名字的首字母生成一个 ASCII 爱心:

❤ J.  +  M. ❤

1. 清理名字

实现HighSchoolSweetheart.clean_up_name方法。 它接收一个名字,把其中所有的-字符替换成空格。 同时还要去掉名字开头和结尾的空白字符。

HighSchoolSweetheart.clean_up_name("Jane-Ann")
# => "Jane Ann"

2. 取名字的首字母

实现HighSchoolSweetheart.first_letter方法。 它接收一个名字,返回它的第一个字母。 记得复用上一步定义的HighSchoolSweetheart.clean_up_name。

HighSchoolSweetheart.first_letter("Jane")
# => "J"

3. 把首字母格式化成缩写

实现HighSchoolSweetheart.initial方法。 它接收一个名字,返回它的大写首字母,后面跟一个点。 记得复用上一步定义的HighSchoolSweetheart.first_letter。

HighSchoolSweetheart.initial("Robert")
# => "R."

4. 把缩写放进爱心里

实现HighSchoolSweetheart.pair方法。 它接收两个名字,返回首字母缩写,两边配上爱心 emoji。 记得复用上一步定义的HighSchoolSweetheart.initial。

HighSchoolSweetheart.pair("Blake Miller", "Riley Lewis")
# => "❤ B.  +  R. ❤"
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Crystal Exercism

准备好开始 高中恋人 了吗?

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