ruby way之string之一

ruby本来很早就要开始看了,不过最近才真正开始看,那本宝石书还差最后1章就读完了,于是开始看the ruby way了,于是在这边做个记录,也算是督促自己吧..
ruby中的string可以使用多种方式来表示.
1 单引号,这种表示支持的转义最少,只支持单引号的转义和\的转义:
[code]'bobo' ->bobo
'bobo\'\\' -> bobo'\
'bobo\t' -> bobo\t[/code]
2双引号,这种表示支持的转义就比较多了,比如换行,比如制表符..
"aa\tsd" -> aa sd
3 使用%q,%Q,%q相当于单引号,%Q相当于双引号.
4 使用here document.
使用这种方式,主要是为了多行字符串.
[code]str = <<HERE
#所需要的字符串
HERE[/code]这里的here你可以随便用什么替代,这个只是一个标记. 还有一点如果在HERE前面加一个-的话,下面每行的字符串都会自动缩进,这里默认的情况下是使用双引号的转义规则的,可是如果你给HERE加上单引号即:'HERE'那么下面的字符串将会按照单引号的转义规则进行转义..

这边还有要注意的地方,请看下面的例子:
[code]str=<<HERE.gsub(/\n/,'')
aaaa
bbbb
HERE[/code]
程序会打印出aaaabbbb,所以这里我们可以理解HERE也就是代表了下面的字符串,我们可以在表示的同时,操作下面的字符串变成我们所需要的样子.

5 得到string的长度,可以使用size或者length方法:
[code]str="bobo",
str.length #4
str.size #4[/code]

6 由于string中可能含有换行,因此我们可以一次读取一行:
[code]str = "Once upon\na time...\nThe End\n"
num = 0
str.each do |line|
num += 1
print "Line #{num}: #{line}"
end[/code]

7如果选择一次读取一个字节,我们可以选择each_byte方法.
[code]str="bobo"
str.each_byte{||byte| puts byte.chr}[/code]
这个将会打印出,每个字符.

8实现自己的字符串比较规则.
要实现自定的字符串比较规则,我们只需要覆盖string内置的<=>方法就可以了.
假设我们想要实现一个长的字符串比较小的规则:
[code]class String
alias old <=>
def <=>(other)
a=self.dump
b=other.dump
if(a.size>b.size) then 0
else
a.old(b)
end
end
end
puts "abcd"<=>"abc"[/code]
会返回0
9 分割字符串,和java中一样,ruby中也有split方法.
默认也就是没有参数时,系统是以空格来进行分割的.
[code]s1="a b c d"
s1.split #[a,b,c,d][/code]
split方法还有一个参数,如果这个参数没忽略,那么尾部的空值将会被去掉,如果参数是整数,那么将要得到的数组的个数被限制为最大为这个参数,并且尾部的空值将被保留。如果参数是负数,那么数组的个数将没有限制,并且尾部的空值也会被保留.

[code]str = "alpha,beta,gamma,,"
puts list1 = str.split(",").length # ["alpha","beta","gamma"]
puts list2 = str.split(",",2).length # ["alpha", "beta,gamma,,"]
puts list3 = str.split(",",4).length # ["alpha", "beta", "gamma", ","]
puts list4 = str.split(",",8).length # ["alpha", "beta", "gamma", "", ""]
puts list5 = str.split(",",-1).length # ["alpha", "beta", "gamma", "", ""]
[/code]

10 格式化string,这个和c里面很像,使用sprintf方法.
[code]name="bobo"
sprintf("[%s]",name)

"[%10s]" % name[/code]
这边还有三个方法,ljust,center和rjust
如果他们的第一个参数大于所要处理的字符串的长度,ljust是字符串左对齐,然后右边补跌入个参数的字符(默认是空格),center是两边补,rjust是右对齐,左边补..
[code]str="bobo"
puts str.ljust(8,"++")
puts str.rjust(8,"++")[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值