Ruby 字符串处理_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的成功率,也许我本该做得好一点.)

时间: 2024-10-01 04:36:08

Ruby 字符串处理_ruby专题的相关文章

21个你应该知道的Ruby编程技巧_ruby专题

1. 快速获取正则表达式的匹配值 通常我们使用正则表达式,都是先match,然后再取结果,但是这样有时候会抛异常,看下面例子: 复制代码 代码如下: email = "Fred Bloggs " email.match(//)[1] # => "fred@bloggs.com" email[//, 1] # => "fred@bloggs.com" email.match(/(x)/)[1] # => NoMethodError

ruby 简单例子_ruby专题

让我们写一个计算阶乘的函数.对于阶乘的数学定义如下: n! = 1               (当 n==0 时)    = n * (n-1)!       (其它情况) 在Ruby里,可以这样来写: 复制代码 代码如下: def fact(n)          if n == 0            1          else            n * fact(n-1)            end        end   你可能会发现 end 的反复出现,正因为如此,Ru

ruby 正则表达式 教程_ruby专题

我们再看一个更有趣的程序.这次我们来测试一个字符串是否和一个由简明模式(concise pattern)编码产生的描述相匹配. 在这些模式(pattern)里,一些字符或字符组合都有独特的意义,包括:  复制代码 代码如下: []  范围描述符 (比如,[a - z] 表示在a 到 z 范围内的一个字母)    \w  字母或数字;相当于 [0-9A-Za-z]   \W  非字母,数字   \s  [ \t\n\r\f]空字符;相当于 [ \t\n\r\f]   \S  非空字符   \d  

Ruby语法笔记_ruby专题

接受用户输入 first_name = gets.chomp 首字母大写 first_name.capitalize! 字母变大写 first_name.upcase! 字母变小写 first_name.downcase! 多行输出 print <<EOF # 多行输出 EOF 注释 # 我是注释 变量获取 #{first_name} 变量 全局变量 $ 类变量 @@ 方法变量 @ 局部变量 小写字母或_ if/else if a < b puts '1' elsif b < a

Ruby中使用SWIG编写ruby扩展模块实例_ruby专题

在使用ruby/rails的过程中,确实发现有时性能不尽人意,如生成一个拥有600项的item的3层树形结构目录要花去20ms,为提高性能在学习用c/c++写ruby模块的过程中,认识了swig,rubyInline等一系列帮助编写c/c++来提升ruby性能的辅助工具. rubyInline用于内嵌c/c++程序,简单快捷,swig则帮助我们更容易地用c/c++写出独立的ruby模块. swig的入门使用方法 目标:用swig/c++编写一个ruby模块Test,并提供add方法作加法运算.

Ruby入门点滴-Ruby的安装_ruby专题

Ruby的安装可以去Ruby的官方网站下载Ruby1.56的Windows安装包,安装安毕后,打开Dos窗口,输入ruby -v显示  ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32] 的话就说明Ruby已经安装成功,版本号为Ruby 1.96.  安装完后,在 开始菜单->程序 里面出现了 Ruby-186-20 这个程序.点开他,下面有五个子菜单.  1. Ruby Documentation (里面是Ruby的联机文档)  2.Ruby

你应该知道的Ruby代码风格_ruby专题

一.空格与tab使用空格缩进(95.364%)使用Tab缩进(4.636%)基于 1,001,987 次提交二.最大行宽80字符(92.618%)120字符(5.893%)150字符(1.489%)基于 1,057,374 次提交三.运算符.冒号.花括号周围,逗号.分号后是否使用空格不使用空格(73.366%) 复制代码 代码如下: sum = 1 +2a,b = 1, 21>2 ? true : false;puts 'Hi'[1, 2, 3].each {|e| puts e} 使用空格(2

Ruby中操作字符串的一些基本方法_ruby专题

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

Ruby的字符串与数组求最大值的相关问题讨论_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