字符串类
字符串的创建
普通定义
str1 = "字符串1"
#注意,单引号里,转义符失效,字符串插值也不能用
str2 = '字符串2'
使用%Q和%q
好处是,不用管""和''的转义
desc = %Q{Ruby的字符串中也可以使用''和""}
str = %q|Ruby said, 'hello, world!'|
使用Here Document
一般使用EOB (end of block)和EOF (end of file)定义
10.times do |i|
print(<<"EOB")
i: #{i}
#注意,这一行,前面一定不能有缩进
EOB
end
10.times do |i|
print(<<-"EOB")
i: #{i}
#如果是用<<-定义的,结束标识符前面可以有缩进
EOB
end
str = <<-EOB
Hello!
Hello!
Hello!
EOB
获取字符串长度
p "hello world".size
p "hello world".length
#字节数
p "hello world".bytesize
#判断长度为0
p "".empty?
p "hello world".empty?
字符串索引
str = "全新的String类对象"
p str[0]
p str[2, 8]
字符串连接
hello = "hello, "
world = "world!"
str = hello + world
p str
#=> "hello, world!
hello = "hello, "
world = "world!"
#hello.concat(world)
hello << world
p hello
#=> "hello, world!
#注意,这里貌似和hello = hello + world一样,实际不一样。这是创建新对象
p world
#=> "world!"
字符串分割
text = "hello:ruby:language"
p text.split(/:/)
换行符处理
删除最后一个字符 | 删除换行符 | |
---|---|---|
非破坏性 | chop | chomp |
破坏性 | chop! | chomp! |
str = "abcd"
newstr = str.chop
p newstr
#=> "abc"
newstr = str.chomp
p newstr
#=> "abcd"
str2 = "abcd\n"
newstr = str2.chop
p newstr
#=> "abcd"
newstr = str.chomp
p newstr
#=> "abcd"
处理文件,一般直接删掉换行符
f.each_line do |line|
line.chomp!
p line
end
指定换行符,windows小心
f.each_line("\r\n") do |line|
line.chomp!
p line
end
字符串检索与置换
#从左到右
str = "ABBBBBB"
p str.index("BB")
#=> 1
#从右到左
p str.rindex("BB")
#=> 5
#判断是否有指定字符串
p str.include?("BB")
#=> true
与索引操作相关的方法
s[n] = str
s[n..m] = str
s[n,len] = str
与数组操作一样
s.slice!(n)
s.slice!(n..m)
s.slice!(n, len)
通过索引删除字符串s的一部分,并返回删除的部分
使用Enumerator(计数器)对象的方法
调用each_line each_char each_type等,不带块,就会返回Enumerator对象。这样就能使用这个模块的方法了
str = "壹\n贰\n叁\n"
#collect等同于map,替换元素
tmp = str.each_line.collect do |line|
line.chomp *3
end
p tmp
#=> ["壹壹壹", "贰贰贰", "叁叁叁"]
常用的字符串方法
s.delete(str)
s.delete!(str)
从s字符串中删除字符串str
s = "防/止/检/索"
p s.delete("/")
#=> "防止检索"
s.reverse
s.reverse!
反转字符串s。
s = "晚上好"
p s.reverse
#=> "好上晚"
s.strip
s.strip!
删除开头和末尾空白字符的方法
p " Thank you. ".strip
#=> "Thank you."
s.upcase
s.upcase!
s.downcase
s.downcase!
s.swapcase
s.swapcase!
s.capitalize
s.capitalize!
各种大小写转换
#全部大写
p "Hello World".upcase
#=> "HELLO WORLD"
#全部小写
p "Hello World".upcase
#=> "hello world"
#大转小,小转大
p "Hello World".upcase
#=> "hELLO wORLD"
#首字母大写,其他小写(段落)
p "Hello World".capitalize
#=> "Hello world"
s.tr
s.tr!
替换字符
p "ABCDE".tr("B", "b")
#=> AbCDE
p "ABCDE".tr("BD", "bd")
#=> AbCdE
p "ABCDE".tr("A-E", "a-e")
#=> abcde
p "BACDE".tr("A-Z", "a-z")
#=> bacde
编码转换
encode
encode!
# encoding: EUC-JP
euc_str = "日语EUC编码"
utf8_str = euc_str.encode("utf-8")