String 有多个方法可以用来操作字符串。
这些方法都直接在字符串上调用,而且经常串联起来,对字符串执行多个操作。
下面列出了一些最常用的方法。
完整的方法列表请参阅 String API 文档。
upcase 方法返回一个新字符串,其中所有字符都转换为大写。
"hello".upcase
# => "HELLO"
downcase 方法返回一个新字符串,其中所有字符都转换为小写。
"HELLO".downcase
# => "hello"
Crystal 提供了替换字符串部分内容的方法。
它们分别是 sub(substitution)和 gsub(global substitution)。
这些方法可以接受字符串、字符或正则表达式作为第一个实参,以及字符串或字符作为第二个实参。
第一个实参是要被替换的字符串部分,第二个实参是替换后的内容。
Char 和正则表达式将在后面的概念中介绍。
sub 方法会用第二个实参替换第一个实参第一次出现的位置。
"hello".sub("l", "r")
# => "herlo"
gsub 方法与 sub 的作用相同,但会用第二个实参替换第一个实参出现的所有位置。
"hello".gsub("l", "r")
# => "herro"
chomp 和 strip 可以用来移除字符串中不需要的字符。
chomp 方法默认会移除字符串末尾的 \r、\n 或 \r\n 字符。
如果调用方法时传入了实参,它就会从字符串末尾移除给定的值。
前提是该值确实出现在字符串末尾。
"hello\n".chomp
# => "hello"
"hello".chomp("llo")
# => "he"
默认情况下,strip 方法会移除字符串开头和末尾的所有空白字符。
如果调用方法时传入了实参,它就会从字符串的开头和末尾移除该实参。
前提是该实参确实出现在字符串的开头或末尾。
" hello ".strip
# => "hello"
index 方法可以用来查找某个字符在字符串中的下标。
index 方法接受一个 String、Char 或正则表达式作为实参。
它还可以接受一个可选的第二个实参,用来指定从哪个下标开始搜索。
index 方法会返回实参第一次出现的下标。
"hello".index("l")
# => 2
"hello".index("l", 3)
# => 3
可以使用 delete_at 方法从字符串中移除一个字符。
delete_at 方法接受一个下标作为实参,并移除该下标处的字符。
"hello".delete_at(0)
# => "ello"
"hello".delete_at(3)
# => "helo"
可以使用 insert 方法在指定的下标处插入一个字符串。
insert 方法接受一个下标作为第一个实参,以及一个字符串作为第二个实参。
insert 方法会返回一个新字符串,第二个实参已插入到该下标处。
"hello".insert(0, "h")
# => "hhello"
"hello".insert(3, "l")
# => "helllo"
在这个练习中,你要帮一对高中情侣在社交媒体上表达爱意,用他们名字的首字母生成一个 ASCII 爱心:
❤ J. + M. ❤
实现HighSchoolSweetheart.clean_up_name方法。
它接收一个名字,把其中所有的-字符替换成空格。
同时还要去掉名字开头和结尾的空白字符。
HighSchoolSweetheart.clean_up_name("Jane-Ann")
# => "Jane Ann"
实现HighSchoolSweetheart.first_letter方法。
它接收一个名字,返回它的第一个字母。
记得复用上一步定义的HighSchoolSweetheart.clean_up_name。
HighSchoolSweetheart.first_letter("Jane")
# => "J"
实现HighSchoolSweetheart.initial方法。
它接收一个名字,返回它的大写首字母,后面跟一个点。
记得复用上一步定义的HighSchoolSweetheart.first_letter。
HighSchoolSweetheart.initial("Robert")
# => "R."
实现HighSchoolSweetheart.pair方法。
它接收两个名字,返回首字母缩写,两边配上爱心 emoji。
记得复用上一步定义的HighSchoolSweetheart.initial。
HighSchoolSweetheart.pair("Blake Miller", "Riley Lewis")
# => "❤ B. + R. ❤"