Ruby 字符串处理

 更新时间:2007年11月24日 13:04:29   作者:  
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的成功率,也许我本该做得好一点.)

相关文章

  • Ruby遍历文件夹同时计算文件的md5sum

    Ruby遍历文件夹同时计算文件的md5sum

    这篇文章主要介绍了Ruby遍历文件夹同时计算文件的md5sum,本文直接给出实现代码,需要的朋友可以参考下
    2015-05-05
  • Rails实现字段加密存储

    Rails实现字段加密存储

    这篇文章主要介绍了Rails实现字段加密存储的方法以及具体的示例代码,非常实用,需要的朋友可以参考下
    2017-11-11
  • Windows下安装配置Ruby的debug工具ruby-debug-base19

    Windows下安装配置Ruby的debug工具ruby-debug-base19

    这篇文章主要介绍了Windows下安装配置Ruby的debug工具ruby-debug-base19的方法,同时讲解了Ruby的IDE RubyMine中的相关配置方法,需要的朋友可以参考下
    2016-03-03
  • ruby 正则表达式详解及示例代码

    ruby 正则表达式详解及示例代码

    这篇文章主要介绍了ruby 正则表达式详解及示例代码的相关资料,需要的朋友可以参考下
    2016-10-10
  • Ruby连接使用windows下sql server数据库代码实例

    Ruby连接使用windows下sql server数据库代码实例

    这篇文章主要介绍了Ruby连接使用windows下sql server数据库代码实例,本文直接给出实现代码,而且给出了两种实现和access数据库的实现代码,需要的朋友可以参考下
    2015-05-05
  • ruby元编程之method_missing的一个使用细节

    ruby元编程之method_missing的一个使用细节

    这篇文章主要介绍了ruby元编程之method_missing的一个使用细节,本文介绍在使用method_missing时造成死循环的一个现象,需要的朋友可以参考下
    2015-05-05
  • 使用Ruby来处理文本的教程

    使用Ruby来处理文本的教程

    这篇文章主要介绍了使用Ruby来处理文本的教程,本文来自于IBM官方网站技术文档,需要的朋友可以参考下
    2015-04-04
  • Ruby中使用Block、Proc、lambda实现闭包

    Ruby中使用Block、Proc、lambda实现闭包

    这篇文章主要介绍了Ruby中使用Block、Proc、lambda实现闭包,在编程领域我们可以通俗的说:子函数可以使用父函数中的局部变量,这种行为就叫做闭包,需要的朋友可以参考下
    2014-06-06
  • ruby 学习笔记(1) 初识语法

    ruby 学习笔记(1) 初识语法

    虽然ruby/ruby on rails从2007年就一直获奖无数,但身为一个中国人,一直对小日本创造的东西不怎么感兴趣,想想其实也没必要,技术本身是无国界的,日本其实也有值得学习的地方(扯远了,呵)
    2010-02-02
  • Ruby元编程的一些值得注意的地方

    Ruby元编程的一些值得注意的地方

    这篇文章主要介绍了Ruby元编程的一些值得注意的地方,作者自己用实际代码给出了相关示例,需要的朋友可以参考下
    2015-08-08

最新评论