字串处理,是ruby的强项。
创建一个字串。任何字串都是String类的实例,所以也可以这样创建:
字串还可以用“<<”联合起来:
字串跟数组一样,可以使用数组的下标来访问:
还可以使用类似于slice的方法:
irb(main):07:0> s[0..3]--------------3表示位置终结数字
=> "hell"
irb(main):08:0> s[0,3]---------------3表示长度
=> "hel"
最简单的还有可以直接取出字串:
irb(main):09:0> s["hello"]
=> "hello"
而子串称述更可以是正则表达式:
irb(main):010:0> s[/^\w+/]
=> "hello"
跟数组一样,字串也支持insert方法:
irb(main):011:0> s= "prety"
=> "prety"
irb(main):012:0> s.insert(-2,"t")------------表示在-2的位置,插入一个"t"。
=> "pretty"
修改字串在ruby里是很方便的,直接像数组一样使用下标即可:
irb(main):013:0> s = "nice girl"
=> "nice girl"
irb(main):014:0> s[0,4] = "helo"
=> "helo"
irb(main):015:0> s
=> "helo girl"
除了下标还可以用正则表达式:
irb(main):016:0> s[/^\w+/] = "prety"
=> "prety"
irb(main):017:0> s
=> "prety girl"
字串的chop和chomp方法作用不同,前者删除最后一个字符,后者删除换行号:
irb(main):018:0> "hello".chop
=> "hell"
irb(main):019:0> "hello\n".chomp
=> "hello"
去除字串两边空格:
irb(main):020:0> " abc ".strip
=> "abc"
去除左边空格:
irb(main):021:0> " abc ".lstrip
=> "abc "
去除右边空格:
irb(main):022:0> " abc ".rstrip
=> " abc"
还可以使用delete方法删除字串里的字符:
irb(main):023:0> "hello".delete("l")
=> "heo"
最常用的字串操作方法包括gsub和scan,都支持正则表达式。
irb(main):024:0> s="hello world"
=> "hello world"
irb(main):025:0> s.gsub(/^\w+/,"kind")
=> "kind world"
irb(main):026:0> s.scan(/\w+/)
=> ["hello", "world"]
gsub执行子串替换,把匹配到的内容替换成第二个参数的内容。
scan执行字串查找,返回一个结果数组。
字串可以split成数组:
irb(main):027:0> s.split(//)
=> ["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d"]
split同样支持正则表达式。字串转换成整数或浮点:
irb(main):028:0> "123".to_i
=> 123
irb(main):029:0> "123".to_f
=> 123.0
each_byte可以遍历一个字串:
irb(main):030:0> "matz".each_byte { |b| puts b.chr }
m
a
t
z
=> "matz"
顾名思义,downcase和upcase方法转换大小写:
irb(main):031:0> "I LOVE RUBY".downcase
=> "i love ruby"
irb(main):032:0> "I love Ruby".upcase
=> "I LOVE RUBY"
字串的长度:
irb(main):033:0> "hello".size
=> 5
字串还可以next:
irb(main):034:0> "x".next
=> "y"
irb(main):035:0> "xyz".next
=> "xza"
从a到z怎么遍历呢:
irb(main):036:0> "a".upto("z") do |s| print s end
abcdefghijklmnopqrstuvwxyz=> "a"
ruby最强大的字串处理,莫过于跟perl一样,内置正则表达式。
irb(main):037:0> s = "hello ruby world"
=> "hello ruby world"
irb(main):038:0> s =~ /ruby/
=> 6
irb(main):039:0> s =~ /Ruby/
=> nil
正则表达式执行后,返回的结果是匹配开始的位置,nil表示不匹配。
当然,在ruby世界里很多人反过来写:
irb(main):040:0> /ruby/ =~ s
=> 6
第一种写法表示字串目标支持=~方法,参数是正则表达式目标。
第二种写法表示正则表达式目标支持=~方法,参数是字串目标。
据说后者效率更高。
字串还有很多实用方法,运行如下语句看看:
irb(main):041:0> String.instance_methods.sort
结果会显示字串所有的方法。