ruby学习笔记(6)

String 类

1)单引号和双引号。 单引号不会对里面的字符进行转义,类似于"\n”这样的转义会直接输出,也不能包含表达式。双引号则可以包含转议字符,也能包含表达式,表达式的格式为 #{xxxx}。需要注意的是,如果单引号里的字符串也包含单引号,还是要用“\'”进行转义的,这个转义是支持的。

=======================

a = "abc"

b = "1\n2\n3\n#{a}"

c = '1\n2\n3\n#{a}'

puts b          #=> 1   2   3   abc

puts c          #=>    1\n2\n3\n#{abc}

=======================

2) 新建字符串。

       <1> 直接使用 ""和''生成字符串。

        <2> 使用String.new()生成字符串。

       <3> 使用%Q和%q。 如果字符串中包括""或''时,不想使用\"和\'频繁转义,可以使用%Q和%q来生成字符串。其中%Q相当于",%q相当于'。和%w一样,分界符可以用<> @@之类的。

=======================

%Q(1\n2\n3\n#{a}"5678"'9012')

%q<1\n2\n3\n#{a}'5678'"9012">

=======================

         <4> 如果是多行文本,可以使用<<"xxx" 或 <<-"xxx"来实现多行。一般xxx多使用EOB或EOF,表示end of black和end of file。注意,如果是xxx可以用单引号或双引号引起来,分别代表单引和双引,也可以不带引号,默认代表双引。注意<<和xxx之间要连在一起,不要有空格。

======================

a = 123

s = <<-"EOB”

i : abc

j : #{a}

adang is me

EOB

print s                     #=> i : abc   

                                       j : 123

                                        adang is me

======================

3) 字符串的长度。 字符串的长度可以用str.size或者str.length来获得。如果是英文字符,那么可以正常返回字符个数,但如果是非英文字符,比如说是中文字符,size返回的值就不正确了。因为ruby中返回的是字节数,不是字符数,这点和js不同。如果是中文,跟编码格式有关,如果是utf-8编码,那么一个中文占用三个字节,如果是ANSI编码,那么一个中文占用两个字节。为了解决这个问题,可以借助于正则表达式,换个思路获得字符串的字符长度。例如utf-8编码的,用str.split(//u).length,ANSI编码的,用str.split(//e).length。

=======================

utf-8编码

a = "我是个中文abc"              

puts a.size                               #=> 18      (5X3+3 = 18)

puts a.split(//u).length             #=> 8         (5+3 = 8)

ANSI编码

a = "我是个中文abc"              

puts a.size                               #=> 13      (5X2+3 = 13)

puts a.split(//e).length             #=> 8         (5+3 = 8)

=======================

4) empty?    ruby中字符串提供了empty?方法判断是否为空。注意,如果有空格或者tab,都不算为空的。

=======================

a = ""

p a.empty?               #=> true

a = " "

p a.empty?               #=> false

=======================

5) split和unpack。 ruby中分割字符串有两种方法,一种是split,按特定字符分隔,另一种是unpack,按“字节”数分隔。unpack的参数格式是aXaX,“X”表示要截取的字节数。需要注意提,如果X+X的字符数不够整个字符串长度的话,字符串后面的字符就没了,如果超过总长度的话,会按最大数来截取,如果不确定最后一节的长度,可以使用a*来截取至结尾处的部分。

=======================

a = "1:2:3:4:5:6"

p a.split(":")         #=>["1","2","3","4","5","6"]

p a.unpack("a2a3")    #=>["1:","2:3"]

p a.unpack("a2a30") #=>["1:","2:3:4:5:6"]

p a.unpack("a2a3a*") #=>["1:","2:3","4:5:6"]

=======================

6) +,<<,和concat。 ruby中字符串的连接有三个方式。用+号可以新建一个字符串,用<<和concat可以修改原字串的值(不新建字符串)。因为<<和concat是修改址的方法,影响会比较大,切忌不要乱用。

=======================

a = "123"

b = "456"

p a + b      #=> "123456"

p a            #=> "123"

a = "123"

b = "456"

a << b     

p a            #=> "123"

a = "123"

b = "456"

a.concat(b)     

p a            #=> "123456"

=======================

7) chomp! 。 删除行尾换行符。 以gets等方法从标准输入读入字符串时,行尾会接着换行符,但实际在处理字符串时,换行符经常很碍事,因此,加上chomp!几乎是一种固定写法。

=======================

a = "123\n"

p a.size           #=>4

a.chomp!

p a.size           #=>3

while line = gets

    line.chomp!

     ..

end

=======================

8) chop和chop!。 用于删除字符串的最后一个字符。

posted on 2009-11-27 18:13  真阿当  阅读(88)  评论(0编辑  收藏  举报