Ruby 字符串(String)
Ruby 字符串分为单引号字符串(’)和双引号字符串(”),区别在于双引号字符串能支持更多的转义字符。
Ruby 中还支持一种采用 %q 和 %Q 来引导的字符串变量,%q 使用的是单引号引用规则,而%Q是双引号引用规则,后面再接一个 (! [{ 等等的开始界定符和与 }]) 等等的末尾界定符。 跟在 q 或 Q 后面的字符是分界符,分界符可以是任意一个非字母数字的单字节字符,如:[,{,(,<,!等,字符串会一直读取到发现相匹配的结束符为止。
desc1 = %Q{Ruby 的字符串可以使用 '' 和 ""。 }
desc2 = %q|Ruby 的字符串可以使用 '' 和 ""。 |
puts desc1
puts desc2
字符串内建方法
我们需要有一个 String 对象的实例来调用 String 方法。下面是创建 String 对象实例的方法。
myStr = String.new("THIS IS TEST")
foo = myStr.downcase
puts "#{foo}"
# 结果:this is test
公共字符串方法
方法 | 描述 |
---|---|
str % arg | 使用格式规范格式化字符串。如果 arg 包含一个以上的替代,那么 arg 必须是一个数组。如需了解更多格式规范的信息,请查看“内核模块”下的sprintf |
str * integer | 返回一个包含 integer 个 str 的新的字符串。换句话说,str 被重复了 integer 次。 |
str + other_str | 链接 other_str 到 str |
str « obj | 链接一个对象到字符串。如果对象是范围为 0.255 之间的固定数字 Fixnum, 则它会被转换为一个字符。把它与 concat 进行比较。 |
str <=> obj | 把 str 与 other_str 进行比较,返回 -1(小于)、0(等于)或 1(大于)。比较是区分大小的。 |
str == obj | 检查 str 和 obj 的相等性。如果 obj 不是字符串,则返回 false,如果 str <=> obj,则返回 true,返回0. |
str =~ obj | 根据正则表达式模式 obj 匹配 str。返回匹配开始的位置,否则返回 false。 |
str[position] # 注意返回的是ASCII码而不是字符。 str[start, length] str[start..end] str[start…end] |
使用索引截取子串 |
str.capitalize! | 将字符串转换为大写字母显示。 |
str.center | 居中字符串 |
str.chomp! | 与 chomp 相同,但是 str 会发生变回并返回。 |
str.chop | 移除 str 中的最后一个字符。 |
str.chop! | 与 chop 相同,但是 str 会发生变化并返回。 |
str.concat(other_str) | 链接 other_str 到 str。 |
str.count(str, …) | 给一个或多个字符集计数。如果有多个字符集,则给这些集合的交集计数。 |
str.crypt(other_str, …) | 对 str 应用单项加密哈希。参数是两个字符长的字符串,每个字符的范围,每个字符的范围为a.z、A.Z、0.9、.或/。 |
str.delete(other_str, …) | 返回 str 的副本,参数交集中的所有字符会被删除。 |
str.deleter!(other_str, …) | 与 delete 相同,但是 str 会发生变化并返回。 |
str.downcase | 返回 str 的副本,所有的大写字母会被替换为小写字母。 |
str.downcase! | 与 downcase 相同,但是 str 会发生变化并返回。 |
str.dump | 返回 str 的版本,所有的非打印字符被替换为 \nnn 符号,所有的特殊字符被转义。 |
str.each(separator=$/){ |substr| block } |
使用参数作为记录分隔符(默认是 $/)分隔 str, 传递每个字符串给被提供的块。 |
str.each_byte{ |fixnum| block } |
传递 str 的每个字节给 block,以字节的十进制表示法返回每个字节。 |
str.each_line(separator=$/) { |substr| block } |
使用参数作为记录分隔符(默认是 $/)分隔 str,传递每个子字符串给被提供的 block。 |
str.empty? | 如果 str 为空(即长度为0),则返回 true。 |
str.eql?(other) | 如果两个字符串有相同的长度和内容,则这两个字符串相等。 |
str.gsub(pattern, replacement) [or] str.gsub(pattern){ |match| block } |
返回 str 的副本,pattern 的所有出现都替换为 replacement 或 block 的值。pattern 通常是一个正则表达式 Regexp; 如果是一个字符串 String, 则没有正则表达式元字符被解释(即,/\d/将匹配一个数字,但 ‘\d’ 将匹配一个反斜杠后跟一个’d’)。 |
str.hash | 返回一个基于字符串长度和内容的哈希。 |
str.hex | 把 str 的前导字符当做十六进制数字的字符串(一个可选的符号和一个可选的0x),并返回相对应的数字。如果错误则返回零。 |
Ruby 数组(Array)
数组的索引从零开始,索引为 -1 表示数组的最后一个元素,-2 表示数组中的倒数第二个元素,以此类推。
# 可以给数组中的每个元素赋值。
names = Array.new(20)
puts names.size # 返回 20
puts names.length # 返回 20
# 可以给数组中的每个元素赋值
names = Array.new(4, "mac")
puts "#{names}"
# 结果:["mac", "mac", "mac", "mac"]
# 你也可以使用带有 new 的块,每个元素使用块中的计算结果来填充:
nums = Array.new(10) { |e| e = e * 2 }
puts "#{nums}"
# 结果:[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
数组内建方法
digits = Array(0..9)
num = digits.at(6)
puts "#{num}"
# 结果:6
公共的数组方法
方法 | 描述 |
---|---|
array & other_array | 返回一个新的数组,包含两个数组中共同的元素,没有重复。 |
array * int[or]array * str | 返回一个新的数组,新数组通过链接 self 的 int 副本创建的。带有 String 参数时,相当于 self.join(str). |
array + other_array | 返回一个新的数组,新数组通过谅解两个数组产生第三个数组创建的。 |
array - other_array | 返回一个新的数组,新数组是从初始数组中移除了在 other_array 中出现的项的副本。 |
array|other_array |
通过把 other_array 加入 array 中,移除重复项,返回一个新的数组。 |
array « obj | 把给定的对象附加到数组的末尾。该表达式返回数组本身,所以几个附加可以连在一起。 |
array <=> other_array | 如果数组小于、等于或大于 other_array,则返回一个整数(-1、0或+1)。 |
array == other_array | 如果两个数组包含相同的元素个数,且每个元素与另一个中相对应的元素相等,那么这两个数组相等。 |
array.abbrev(pattern = nil) | 为 self 中的字符串计算明确的缩写集合。如果传递一个模式或一个字符串,只考虑当前字符串匹配模式或者以该字符串开始的情况。 |