娃娃鸭学Ruby-11、文本

Ruby使用String类的对象表示文本。
字符串是可变的对象
定义了 提取字符串、插入和删除文本,搜索及替换等操作

1、字符串字面量
由单引号引用的字符串字面量
被单引号所引用的字符串是形式最简单的字符串字面量,单引号之间的文本就是字符串的值。
'This is a simple Ruby string literal'
要用到单引号('),前面放置一反斜线,反斜线转义再加一个反斜线就可以了。
'Won\'t you read O\'Reilly \'s book?'
'This string literal ends with a single backslash:\\'
'This is a backslash-quote:\\\''
'Two backslashed:\\\\'

后面不是需要反斜线的,前面出现则就字面量,如以下相等:
'a\b'=='a\\b'

单引号引用的字符串可以跨越多行,得到的字符串字面量包含换行字符。
'This is a long string literal \
that includes a backslash and a new line'
希望不引入换行符
message ='These three literals are '\
'concatenated into one by the interpreter.'\
'The resulting string contains no newlines.'

由双引号引用的字符串字面量
支持更多转义序列,如\n \t \"
"\t\"This quote begins with a tab and ends with a newline\"\n"
"\\" # A single backslash
Ruby1.9 \u这个转义序列能将任意的Unicode字符嵌入到双引号引用的字符串中。

强大功能,
双引号引用的字符串包含Ruby表达式。
"360 degrees=#{2*Math::PI} radians" # "360 degrees=6.28318530717959 radians"
当插入的表达式只是一个对于全局、实例或类变量的引用时,花括号可以省略:
$salutation='hello'
"#$salutation world" # hello world

当#后面是{、$或@字符时,#要加已转义
"My phone #: 555-1324"
"Use \#{ to interpolate expressions"

C程序中的 printf springf
springtf("pi is about %.4f",Math::PI) # returns "pi is about 3.1416"
Ruby自己风格:
"pi is about %.4f" % Math::PI # pi is about 3.1416

双引号引用可以跨多行,\可以去年终结符否则终结符包括在字面量中。
更好的方式,将终结符加在字面量中
"This string has three lines.\r\n"\
"It is written as three adjacent literals\r\n"\
"separated by escaped new lines\r\n"

转义符 含义
\x 除非是终结符否则\x==x
\a Ascii码7 控制台铃声等价于\C-g或\007
\b 退格键 Ascii 8
\e Esc字符ascii 27
\f 换页符 ascii 12 \C-l \014
\n 换行符 Ascii 10
\r 回车符 13
\s 空格符 32
\t水平制表符 ascii 9
\unnnn Unicode 码点,n为十六进制,不能省略开头的0
\u{十六进制数字}
\v 垂直制表符Ascii 11
\ nnn 000-377八进制数
\nn \0nn
\ n \00n
\xnn nn 00-FF
\xn \x0n
\cx \C-x
\C-x
\M-x
\eol 行终止符前面的反斜线。

Unicode转义序列
\unnnn
"\u00D7" #=>"x"
字母可以大小写
"\u20ac" #=>" "
\u{}
0-10FFFF
"\u{A5}" #=>"¥" "\u00A5"
"\u{3C0}" #=> "\u03C0"
"\u{10ffff}" #=>最大的Unicode
可以放入多个码点在{}中用空格或tab字符进行分隔
money="\u{20AC A3 A5}" #=> " £$"
空格不会放在字符串中,可以加入码点20
money="\u{20Ac 20 A3 20 A5}" #=>" £ $"

2011-3-31 20:31 danny

字符串字面量的分界符
%q开头的字符串字面量 单引号引用字符串的规则
%Q(或%)开头的字符串字面量 双引号引用字符串的规则

q或Q后的第一个字符为起始分界符,下一个为终止分界符。如果起始分界符为(,[,{或<,终止分界符为),],}或>
%q(Don't worry about escaping ' characters!)
%Q|"How are you?",he said|
%-This string literal ends with a newline \n-
对边界进行转义
%q_This string literal contans \_underscores\__
%Q!Just user a _different_ delimiter\!!
成对出现的分界符,只要成对出现可以不用转义
%<<book><title>Ruby in a Nutshell</title></book>>
%((1+(2*3)=#{(1+(2*3))})
%(A mismatched paren \( must be escaped)

Here document
以<<或<<-开头,后面紧跟(避免和左移位操作混淆,不允许有空格)一个用于指定结尾分界符的标识符或字符串,从下一行开始直到该分界符单独出现在一行为止,其间的文本都被作为该字符串字面量的内容。
document=<<HERE
This is a string literal.
It has two lines and abruptly ends...
HERE

更复杂功能
greeting=<<HERE + <<THERE +"World"
Hello
HERE
There
THERE
注意 
  Here document的结尾分界符必须单独出现在一行,后面不能接注释。
document=<<-"# # #"
<html><head><title>#{title}</title></head>
<body>
<h1>#{title}</h1>
#{body}
</body>
</html>
2011-4-1 19:59

反引号所引用的命令的执行
`
该文本的值将被传递给一个特殊的名为Kernel.`的方法,该方法将该文本的值作为一个操作系统shell命令来执行,并且将该命令的输出作为字符串返回。
`ls` 同Windows下的`dir`
if windows
listcmd=`dir`
else
listcmd=`ls`
end
listing =`#{listcmd}`

listing=Keren.`(listcmd)

字符串字面量和可变性
Ruby的字符串是可变的。
Ruby解释器无法用同一个对象来表达两个相同的字符串字面量的。
每当Ruby遇见一个字符串字面量时,它都会新建一个对象。
10.times{puts "test".object_id}
应该避免在循环中使用字符串字面量。

String.new方法
通过String.new方法创建新字符串。
2011-4-1 20:12
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值