Ruby字符串处理

字串处理,是ruby的强项。

      irb(main):001:0> s = "hello"

       => "hello"
创建一个字串。任何字串都是String类的实例,所以也可以这样创建:

      irb(main):002:0> s = String.new("hello")

      => "hello"
字串还可以用“<<”联合起来:
      irb(main):003:0> s << " world"
      => "hello world"
 当然可以串串烧:

       irb(main):004:0> s << " welcome" << " to" << " ruby"
       => "hello world welcome to ruby"

 

字串跟数组一样,可以使用数组的下标来访问:

       irb(main):005:0> s = "hello world"
       => "hello world"

      irb(main):006:0> s[0].chr
      => "h"

还可以使用类似于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
abcdefghijklmnopqrstuvwx yz=> "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

 

结果会显示字串所有的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值