Ruby 字符串处理

Ruby将字符串像数字一样处理.我们用单引号('...')或双引号("...")将它们括起来.

ruby> "abc"

"abc"

ruby> 'abc'

"abc"

单引号和双引号在某些情况下有不同的作用.一个由双引号括起来的字符串允许字符由一个前置的斜杠引出,而且可以用#{}内嵌表达式.而

单引号括起来的字符串并不会对字符串作任何解释;你看到的是什么便是什么.几个例子:

ruby> print "a\nb\nc","\n"

a

c

nil

ruby> print 'a\nb\n',"\n"

a\nb\nc

nil

ruby> "\n"

"\n"

ruby> '\n'

"\\n"

ruby> "\001"

"\001"

ruby> '\001'

"\\001"

ruby> "abcd #{5*3} efg"

"abcd 15 efg"

ruby> var = " abc "

" abc "

ruby> "1234#{var}5678"

"1234 abc 5678"

Ruby的字符串操作比C更灵巧,更直观.比如说,你可以用+把几个串连起来,用*把一个串重复好几遍:

ruby> "foo" + "bar"

"foobar"

ruby> "foo" * 2

"foofoo"

相比之下,在C里,因为需要精确的内存管理,串联字符串要笨拙的多:

char *s = malloc(strlen(s1)+strlen(s2)+1);

strcpy(s, s1);

strcat(s, s2);

/* ... */

free(s);

但对于Ruby,我们不需要考虑字符串的空间占用问题,这令到我们可以从烦琐的内存管理中解脱出来.

下面是一些字符串的处理,

串联:

ruby> word = "fo" + "o"

"foo"

重复:

ruby> word = word * 2

"foofoo"

抽取字符(注意:在Ruby里,字符被视为整数):

ruby> word[0]

102            # 102 is ASCII code of `f'

ruby> word[-1]

111            # 111 is ASCII code of `o'

(负的索引指从字符串尾算起的偏移量,而不是从串头.)

提取子串:

ruby> herb = "parsley"

"parsley"

ruby> herb[0,1]

"p"

ruby> herb[-2,2]

"ey"

ruby> herb[0..3]

"pars"

ruby> herb[-5..-2]

"rsle"

检查相等:

ruby> "foo" == "foo"

true

ruby> "foo" == "bar"

false

注意:在Ruby 1.0里,以上结果以大写字母出现.

好,让我们来试试这些特性.下面是一个猜词的谜题,可能"谜题"这个词用在下面的东西上太酷了一点;-)

# save this as guess.rb

words = ['foobar', 'baz', 'quux']

secret = words[rand(3)]

print "guess? "

while guess = STDIN.gets

guess.chop!

if guess == secret

print "You win!\n"

break

else

print "Sorry, you lose.\n"

end

print "guess? "

end

print "The word was ", secret, ".\n"

现在,别太担心代码细节了.下面是谜题程序运行的一个对话.

% ruby guess.rb

guess? foobar

Sorry, you lose.

guess? quux

Sorry, you lose.

guess? ^D

The word was baz.

(考虑到1/3的成功率,也许我本该做得好一点.)

(0)

相关推荐

  • Ruby中字符串左侧补零方法实例

    最近有个需求,把数字显示成固定的位数,位数不足的在前面以零补充 比如 5 位: 复制代码 代码如下: 3 -> 00003 292 -> 00292 12422 -> 12422 发现 Ruby 很容易就可以实现了 复制代码 代码如下: irb> "%05d" % 12422 "12422" irb> "%05d" % 22 "00022" 上面的方法基本上是标准作法.如果是直接处理字符串,也可以

  • Ruby字符串、条件、循环、数组、Hash、类基本操作笔记

    一.字符串操作 字符串插值 1.#{}: 任意放置在#{}中的合法Ruby代码都将被求值,并被替换为求值结果插入到原位置 2.单引号与双引号差别: 双引号允许字符转义,单引号不允许转义,里是什么字符,用户看到的就是什么字符 单引号不允许字符插值 字符串拆分 1.以空格拆分:string.split(' ')字符串连接 方法一.'Ruby' + 'Monk', stdout: RubyMonk 方法二."Monk".concat("Ruby") stdout: Mon

  • Ruby中的字符串编写示例

    优先使用 字符串插值 来代替 字符串串联. # bad email_with_name = user.name + ' <' + user.email + '>' # good email_with_name = "#{user.name} <#{user.email}>" # good email_with_name = format('%s <%s>', user.name, user.email) Consider padding string

  • Ruby中实现把字符串转换为类的2种方法

    最近有个需求,需要根据一个字符串当作一个类来使用,例如: 有一个字符串 "ChinaMag",根据这个字符串调用 类 ChinaMag下的方法. 解决办法: 1.rails可以使用 constantize方法. 复制代码 代码如下: pry(main)> 'ChinaMag'.constantize => ChinaMag pry(main)> "Test::Unit".constantize => Test::Unit 2.ruby可以使用

  • Ruby简洁学习笔记(一):字符串、数字、类和对象

    为了证明Ruby真的好用,hello world也能写的如此简洁: 复制代码 代码如下: puts 'hello world' 1.输入/输出 复制代码 代码如下: print('Enter your name') name=gets() puts("Hello #{name}") 注:Ruby是区分大小写的 2.String类 puts("Hello #{name}")中的变量 name是内嵌在整个String里的,通过 #{ } 包裹进行内嵌求值,并用双引号&q

  • Ruby中操作字符串的一些基本方法

    在Ruby中的String对象持有和操纵的任意序列的一个或多个字节,通常表示人类语言的字符表示. 简单的字符串文本括在单引号(单引号字符).引号内的文本的字符串值: 'This is a simple Ruby string literal' 如果需要内放置一个单引号,单引号的字符串文字,在它前面加上一个反斜杠Ruby解释器不认为终止字符串: 'Won\'t you read O\'Reilly\'s book?' 反斜杠也可以转义另一个反斜杠,这样第二个反斜杠本身不是解释为转义字符. 以下是字

  • 详解Ruby中正则表达式对字符串的匹配和替换操作

    正则匹配 说起Ruby当然要提起它的正则表达式机制,正则表达式作为一个强大的匹配语言已经越来越多的使用到不同的领域当中,从字符串验证,匹配,到网页抽取等.虽然有些人诟病与正则表达式的匹配效率,但是考虑到正则的强大匹配能力也就无所谓了. 说起Ruby正则表达式不就不能不说起Ruby的=~和match两种匹配方式,我们还是用实例来说明一下这两种匹配方式的区别吧.先来说一说=~的用法吧: message="afhadhffkdf414j" regex=/[a-z](\d{3})[a-z]/

  • Ruby的字符串与数组求最大值的相关问题讨论

    max方法 b=[1,3,55,777,2,4,6,8,0] 对于数值型的数据,max会得到数组的最大值,min得到数组的最小值 b.max => 777 b.min => 0 而对于字符串型数组比较大小没有实际意义, ruby中给出的例子是 # enum.max -> obj # enum.max { |a, b| block } -> obj #a = %w(albatross dog horse) #a.max => "horse" # a.max

  • Ruby编写HTML脚本替换小程序的实例分享

    在一个文件里有很多以下内容: <p style="display:none">此题选D. .... .... .... </p> 而本人要实现的功能是将它替换成: <div style="display:none" class="sl_explain">此题选D. ..... ..... ..... </div> 这个东西看起来有点简单,但本人整整花了半天才实现此功能,主要是很久没写RUBY程序了,

  • Ruby中创建字符串的一些技巧小结

    %{String}  用于创建一个使用双引号括起来的字符串 %Q{String} 用于创建一个使用双引号括起来的字符串 复制代码 代码如下: str=<<END_OF_STRING   a string   END_OF_STRING %Q!Some String of "Characters"! <==> " Some String of /"Characters/" " %q{String} 用于创建一个使用单引号括起

  • Ruby中常用的字符串处理函数使用实例

    1.返回字符串的长度 复制代码 代码如下: str.length => integer 2.判断字符串中是否包含另一个串 复制代码 代码如下: str.include? other_str => true or false "hello".include? "lo"   #=> true "hello".include? "ol"   #=> false "hello".includ

随机推荐