Ruby 字符串处理(rubyzvat怎么读)原创

随心笔谈2年前发布 admin
190 0 0

文章摘要

Ruby支持多种字符串表示方式,使用单引号('...')或双引号("...")将字符串括起来。双引号允许使用#{}嵌入表达式,而单引号用于直接表示字符串内容。例如: ```ruby ruby> print "anbnc", "n" a c nil ruby> print 'anbnc', "n" anbnc nil ``` 单引号字符串不会进行额外解释,而双引号字符串允许显式转义字符。此外,Ruby的字符串操作非常灵活,支持连接(+)和重复(*): ```ruby ruby> "foo" + "bar" "foobar" ruby> "foo" * 2 "foofoo" ``` 在C语言中,字符串操作需要复杂的内存管理,而Ruby简化了这一过程。此外,Ruby支持字符串索引和切片操作,例如: ```ruby ruby> word = "foo" ruby> word[0] 102 ruby> herb = "parsley" ruby> herb[0,1] "p" ruby> herb[-2,2] "ey" ``` 字符串比较和相等性检查也非常方便: ```ruby ruby> "foo" == "foo" true ruby> "foo" == "bar" false ``` 这些特性使得Ruby在字符串处理上更加高效和直观。此外,Ruby还支持通过用户输入猜测隐藏字符串的功能,如以下示例: ```ruby words = ['foobar', 'baz', 'quux'] secret = words[rand(3)] print "guess? " loop do guess = STDIN.gets.chomp 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字符串操作的强大功能。


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学习笔记之gem 命令详解Ruby rails 页面跳转(render和redirect_to)RUBY 新手教程 跟我一起学ruby学习Ruby你需要了解的相关知识(rvm, gem, bundle, rake, rails等)Ruby中执行Linux shell命令的六种方法详解淘宝网提供的国内RubyGems镜像简介和使用方法二十分钟 教你Ruby快速入门 图文教程详解Ruby中正则表达式对字符串的匹配和替换操作Ruby Gems更换淘宝源方法Windows下Ruby on Rails开发环境安装配置图文教程ruby 学习笔记(2) 类的基本使用ruby 异常处理:rescueCentOS 6.3下编译安装Ruby 2.0笔记Ruby中的return、break、next详解举例讲解Ruby中require的使用方法更改RubyGem安装源使用Ruby来处理JSON的简单教程Ruby信号处理详解

© 版权声明

相关文章