- 浏览: 1400341 次
- 性别:
- 来自: 火星
文章分类
最新评论
-
aidd:
内核处理time_wait状态详解 -
ahtest:
赞一下~~
一个简单的ruby Metaprogram的例子 -
itiProCareer:
简直胡说八道,误人子弟啊。。。。谁告诉你 Ruby 1.9 ...
ruby中的类变量与类实例变量 -
dear531:
还得补充一句,惊群了之后,数据打印显示,只有一个子线程继续接受 ...
linux已经不存在惊群现象 -
dear531:
我用select试验了,用的ubuntu12.10,内核3.5 ...
linux已经不存在惊群现象
接着昨天的。
11 控制字符串的大小写 。
downcase 方法可以转换一个字符串为小写,upcase可以转换一个字符串为大写.capitalize 方法强迫字符串第一个字符为大写,其他的字符为小写。
swapcase 方法可以将一个字符串中的大小写进行翻转,而casecmp方法则是实现了和<=>相同的功能,只不过忽略了大小写.
我们还可以通过downcase!或者upcase!方法来判断一个字符串是否含有大写或者小写字母.
12 得到和设置子字符串
在ruby中得到子字符串有很多不同的方法,经常使用的是中括号,中括号里面可以是数字,一个区间,一个正则表达式,或者一个string.
如果指定了一对数字的话,两个数字各代表偏移和长度:
虽然长度不能是负数,可是这边我们的偏移可以是负数,如果是负数的话偏移是从字符串左边算起的,并且起始位置是-1而不是0.
中括号里面也可以放区间,在这里区间也就是所要处理的string的起始位置和结束位置。区间的第一个数字可以为负数,可是第一个数字必须得比第二个数字小,如果不符合这个的话将会返回nil.
正则表达式也可以放.这个将会返回正则表达式所匹配的字符串.
一个string也可以放进中括号,如果它是所处理的string的子字符串的话,方法将会返回它自己,否则将返回nil
最终,中括号里还可以放进一个数字,这个数字代表了从左往右第几个字符:
13 在一个string中进行替换.
我们可以使用sub或者gsub方法来进行替换,他们两个方法第一个参数都是接受正则表达式。其中,sub方法替换掉第一个匹配的地方,而gsub方法替换掉左右匹配的地方:
14 搜索一个字符串
index方法返回指定的子字符串,正则表达式或者字符的起始位置(如果有多个匹配的只返回第一个匹配的起始位置),没有发现的话返回nil:
而rindex则是从string的右边(也就是结束处)开始查找,不过返回的值却是从左边数起的:
而include?方法只是简单的返回是否指定的子字符串属于所处理的字符串.
scan方法遍历一遍整个字符串查找出符合指定模式的字符串并组成一个数组或者将每次匹配的结果传递给block(注意,这边只是传递)
看下面的代码:
这边不仅没有转换为大写字母,而且直接把原始的字符串打印出来了,这边的原因就是我前面所提到的,如果是block形式的话,它仅仅只是把每次匹配的结果传递给block..
15一个字符和asc之间的转换。
我们可以使用<<符号或者chr来把一个asc转换为字符串:
而要将一个字符转换为一个asc码的话我们可以使用unpack方法:
16 隐式转换和显式转换(也就是转换为字符串)
在ruby中,to_s和to_str让人很混淆.他们都是转换一个对象为string,可是他们有什么不同呢?
在ruby的核心类中基本都实现了to_s,而to_str却不是.
在这边to_s是显式转换,to_str是隐式转换,
to_s方法返回真正的string对象,而隐式转换则是一个强迫的转换,有点像java中的强制转型。
我们可以看下面的例子:
这边的加号会将e强制转型为string因此会调用to_str,再看下面的代码
这边会将345强制转型为string,因此就会调用to_str方法.
17字符串尾部添加元素.
我们能使用<<操作符.
18 移除换行符和其他字符
chop方法将会删除最后一个字符,返回新的string。如果字符是以\r\n结束,则两个字符都会被删除.
而chomp方法则会默认删除回车换行符,如果有参数的话,将会删除参数所代表的字符串
19 删除空格符
strip将会删除掉字符串的开头和结尾的空格
如果你只想从字符串的开头或者结尾的空格,那么可以使用lstrip或者rstrip
20 重复字符串
我们可以使用*来操作重复字符串:
11 控制字符串的大小写 。
downcase 方法可以转换一个字符串为小写,upcase可以转换一个字符串为大写.capitalize 方法强迫字符串第一个字符为大写,其他的字符为小写。
s1 = "Boston Tea Party" puts s2 = s1.downcase # "boston tea party" puts s3 = s2.upcase puts s1.capitalize #Boston tea party
swapcase 方法可以将一个字符串中的大小写进行翻转,而casecmp方法则是实现了和<=>相同的功能,只不过忽略了大小写.
puts s1.swapcase #bOSTON tEA pARTY n4 = "ABC".casecmp("abc") #0
我们还可以通过downcase!或者upcase!方法来判断一个字符串是否含有大写或者小写字母.
str="asdas" str2="ASDF" puts str.downcase! ==nil puts str2.upcase! ==nil
12 得到和设置子字符串
在ruby中得到子字符串有很多不同的方法,经常使用的是中括号,中括号里面可以是数字,一个区间,一个正则表达式,或者一个string.
如果指定了一对数字的话,两个数字各代表偏移和长度:
str = "Humpty Dumpty" puts sub1 = str[7,4] # "Dump" puts sub2 = str[7,99] # "Dumpty" (长度超长也可以) puts sub3 = str[10,-4] # nil (长度是负数)
虽然长度不能是负数,可是这边我们的偏移可以是负数,如果是负数的话偏移是从字符串左边算起的,并且起始位置是-1而不是0.
str1 = "Alice" puts sub1 = str1[-3,3] # "ice" puts str2 = "Through the Looking-Glass" puts sub3 = str2[-13,4] # "Look"
中括号里面也可以放区间,在这里区间也就是所要处理的string的起始位置和结束位置。区间的第一个数字可以为负数,可是第一个数字必须得比第二个数字小,如果不符合这个的话将会返回nil.
str = "Winston Churchill" puts sub1 = str[8..13] # "Church" puts sub2 = str[-4..-1] # "hill" puts sub3 = str[-1..-4] # nil puts sub4 = str[25..30] # nil
正则表达式也可以放.这个将会返回正则表达式所匹配的字符串.
str = "Alistair Cooke" puts sub1 = str[/l..t/] # "list" puts sub2 = str[/s.*r/] # "stair" puts sub3 = str[/foo/] # nil
一个string也可以放进中括号,如果它是所处理的string的子字符串的话,方法将会返回它自己,否则将返回nil
str = "theater" puts sub1 = str["heat"] # "heat" puts sub2 = str["eat"] # "eat" puts sub3 = str["ate"] # "ate" puts sub4 = str["beat"] # nil puts sub5 = str["cheat"] # nil
最终,中括号里还可以放进一个数字,这个数字代表了从左往右第几个字符:
str = "Aaron Burr" puts ch1 = str[0] # A puts ch1 = str[1] # a puts ch3 = str[99] # nil
13 在一个string中进行替换.
我们可以使用sub或者gsub方法来进行替换,他们两个方法第一个参数都是接受正则表达式。其中,sub方法替换掉第一个匹配的地方,而gsub方法替换掉左右匹配的地方:
s1 = "spam, spam, and eggs" s2 = s1.sub(/spam/,"bacon") # "bacon, spam, and eggs" s3 = s2.sub(/(\w+), (\w+),/,'\2, \1,') # "spam, bacon, and eggs" s4 = "Don't forget the spam." s5 = s4.sub(/spam/) { |m| m.reverse } s5 = "alfalfa abracadabra" s6 = s5.gsub(/a[bl]/,"xx") # "xxfxxfa xxracadxxra" s5.gsub(/[lfdbr]/) { |m| m.upcase + "-" } # s5 is now "aL-F-aL-F-a aB-R-acaD-aB-R-a"
14 搜索一个字符串
index方法返回指定的子字符串,正则表达式或者字符的起始位置(如果有多个匹配的只返回第一个匹配的起始位置),没有发现的话返回nil:
str = "Albert Einstein" puts pos1 = str.index(?E) # 7 puts pos1 = str.index(69) # 7 puts pos2 = str.index("bert") # 2 puts pos3 = str.index(/in/) # 8 puts pos4 = str.index(?e) # nil puts pos5 = str.index("bart") # nil puts pos6 = str.index(/wein/) # nil
而rindex则是从string的右边(也就是结束处)开始查找,不过返回的值却是从左边数起的:
str = "Albert Einstein" puts pos1 = str.rindex(?E) # 7 puts pos2 = str.rindex("bert") # 2 puts pos3 = str.rindex(/in/) # 13 (finds rightmost match) puts pos4 = str.rindex(?W) # nil puts pos5 = str.rindex("bart") # nil puts pos6 = str.rindex(/wein/) # nil
而include?方法只是简单的返回是否指定的子字符串属于所处理的字符串.
str1 = "mathematics" puts flag1 = str1.include? ?e # true puts flag2 = str1.include? "math" # true puts str2 = "Daylight Saving Time" puts flag3 = str2.include? ?s # false puts flag4 = str2.include? "Savings" # false
scan方法遍历一遍整个字符串查找出符合指定模式的字符串并组成一个数组或者将每次匹配的结果传递给block(注意,这边只是传递)
str1 = "abracadabra" puts sub1 = str1.scan(/a./) puts sub1 = str4.scan(/a./){|w| puts w} #ab ac ad
看下面的代码:
str4 = "abracadabra" sub1 = str4.scan(/a./){|w| w.upcase} puts sub1
这边不仅没有转换为大写字母,而且直接把原始的字符串打印出来了,这边的原因就是我前面所提到的,如果是block形式的话,它仅仅只是把每次匹配的结果传递给block..
15一个字符和asc之间的转换。
我们可以使用<<符号或者chr来把一个asc转换为字符串:
puts "a"<<111 puts 111.chr
而要将一个字符转换为一个asc码的话我们可以使用unpack方法:
puts "E".unpack("c")#69
16 隐式转换和显式转换(也就是转换为字符串)
在ruby中,to_s和to_str让人很混淆.他们都是转换一个对象为string,可是他们有什么不同呢?
在ruby的核心类中基本都实现了to_s,而to_str却不是.
在这边to_s是显式转换,to_str是隐式转换,
to_s方法返回真正的string对象,而隐式转换则是一个强迫的转换,有点像java中的强制转型。
我们可以看下面的例子:
class Helium def to_s "He" end def to_str "helium" end end e = Helium.new print "Element is " puts e # Element is He puts "Element is " + e # Element is helium puts "Element is #{e}" # Element is He
这边的加号会将e强制转型为string因此会调用to_str,再看下面的代码
class Fixnum def to_str self.to_s end end puts str = "The number is " + 345 # The number is 345
这边会将345强制转型为string,因此就会调用to_str方法.
17字符串尾部添加元素.
我们能使用<<操作符.
str = "A" str << [1,2,3].to_s << " " << (3.14).to_s #如果一个数字在0..255 之间,将会把他转为一个字符 str = "Marlow" str << 101 << ", Christopher" # str is now "Marlowe, Christopher"
18 移除换行符和其他字符
chop方法将会删除最后一个字符,返回新的string。如果字符是以\r\n结束,则两个字符都会被删除.
str = "abcxyz" s1 = str.chop # "abcxy" str2="abc\r\n" s2=str2.chop #abc
而chomp方法则会默认删除回车换行符,如果有参数的话,将会删除参数所代表的字符串
str = "abcxyz" puts s1 = str.chomp #abcxyz str2 = "123\n" puts s2=str2.chomp #123 str1 = "abcxyz" str2 = "abcxyz" puts s1 = str1.chomp("yz") # "abcx" puts s2 = str2.chomp("x") # "abcxyz"
19 删除空格符
strip将会删除掉字符串的开头和结尾的空格
sss="a d c " puts sss.strip
如果你只想从字符串的开头或者结尾的空格,那么可以使用lstrip或者rstrip
str = " abc " s2 = str.lstrip # "abc " s3 = str.rstrip # " abc"
20 重复字符串
我们可以使用*来操作重复字符串:
puts etc = "Etc. "*3 # "Etc. Etc. Etc. "
发表评论
-
一个创建闭包的小技巧
2008-06-05 00:12 2134一个小技巧,在Ola Bini 的blog上看到的。 假设你 ... -
解决Colored Cubes问题
2008-06-02 10:43 2785Engineering Puzzle You have fo ... -
ruby1.9中的Iterators
2008-03-05 22:37 3722在ruby1.9中增加了External Iterators这 ... -
一个简单的ruby Metaprogram的例子
2008-03-03 23:49 4104比如下面一个文件 people.txt 引用name,age ... -
Ruby Object Model
2008-03-03 19:29 3576刚好看到,保存一下. -
一个检测方法的参数类型的小程序
2008-03-02 22:48 3249今天没事看blog的时候,看到一个小子实现了这个,不过他的程序 ... -
rails中的BlankSlate源码分析
2008-02-28 23:27 3447其实这个类实现的功能很简单,那就是实现一个没有predefin ... -
ruby中的类变量与类实例变量
2008-02-26 21:15 7636首先,在ruby1.8中类变量是所有子类和父类共享的,可以看下 ... -
在ubuntu上共存多个版本的ruby
2008-02-24 15:20 4377今天装Revactor库的时候,真把我郁闷了,没想到ubunt ... -
看到了一个用ruby写的scheme解释器
2008-02-16 21:35 3771,自己本来想等啥时候有时间做个类似的东西呢,没想到已经有人做 ... -
ruby way之处理RSS和Atom
2008-01-31 01:32 35231 rss 标准库 RSS 是基于xml的,因此你能简单的将 ... -
ruby way之使用REXML解析xml
2008-01-30 00:35 9254REXML 是一个完全用ruby写的processor ,他有 ... -
rails2中的一些被废弃的用法
2008-01-29 00:33 2544这些只是自己最近看web开发敏捷之道的时候(由于书中的版本是1 ... -
ruby way之动态特性之二
2008-01-25 00:49 36801 得到所定义的实体的列表 ruby的反射api能够使我们在 ... -
ruby way之动态特性之一
2008-01-23 01:25 45461 动态的evaluate代码 全局的方法eval 编译并且 ... -
ruby way之高级OOP特性之二
2008-01-20 03:43 29491 把代码像对象一样存储 当你想要以对象的形式存储一块代码的 ... -
ruby way之高级OOP特性之一
2008-01-19 12:14 22661 发送一条消息给一个对象 当你调用一个方法时,你也就是发送 ... -
ruby way之OOP之二
2008-01-16 23:59 23641 理解allocate 在一些特殊的环境中,你可能需要不调 ... -
ruby way之OOP之一
2008-01-16 00:25 26371 使用多个构造方法 在ruby中没有像c++或者ruby中 ... -
ruby way之连接数据库
2008-01-14 00:47 2475这边都只是个大概,具体的要自己去看文档了. 1 连接SQLi ...
相关推荐
The Ruby Way(第2版) <br>The Ruby Way assumes that the reader is already familiar with the subject matter. Using many code samples it focuses on "how-to use Ruby" for specific applications, either ...
The Ruby Way 第三版(英文版),全书22章,书中包含600多个按主题分类的示例。每个示例都回答了“如何使用Ruby来完成”的问题。 ——Ruby on Rails之父David Heinemeier Hansson倾力推荐!
《The Ruby Way 第二版》...“《The Ruby Way (第2版)中文版》在阐述元编程(metaprogramming)等方面尤其出类拔萃,而元编程是Ruby最引人注目的方面之一。” ——Ruby on Rails之父David Heinemeier Hansson倾力推荐!
这本书的第二版在2006年出版,由Addison-Wesley出版,作者通过深入浅出的方式,揭示了Ruby语言的强大功能和优雅特性。 Ruby是一种动态类型、面向对象的编程语言,它的设计理念是注重简洁和生产力,让开发者能够更...
内含以下4个文档: 1、Addison.Wesley.The.Ruby.Way.2nd.Edition.Oct.2006.chm 2、O'Reilly.Learning.Ruby.May.2007.chm 3、Programming Ruby 2e.pdf 4、ruby中文文档.chm
the ruby way the ruby way
总结来说,Ruby 的 String 类型强大之处在于它的可变性以及对性能的优化。通过内部结构的巧妙设计,Ruby 能够在保持字符串操作便捷的同时,有效地管理和利用内存,减少了不必要的内存分配和复制。这使得在处理字符串...
### Addison Wesley《The Ruby Way》第二版(2006年10月) #### 书籍概览 《The Ruby Way》是由Hal Fulton编写的关于Ruby编程语言的经典著作,该书的第二版出版于2006年10月,由Addison Wesley Professional出版社...
《The Ruby Way》是一本备受推崇的Ruby编程教程,它以独特的方式深入浅出地介绍了Ruby语言。这本书的核心理念是“如何解决问题”,作者通过实际的编程示例和问题解决策略,帮助读者理解Ruby的强大功能和优雅语法。 ...
"11.5 时间日期the ruby way"这个主题深入探讨了Ruby中处理时间日期的最佳实践和常见用法。让我们逐一了解这些知识点。 首先,`Time.now`是Ruby中获取当前时间的标准方法。它返回一个`Time`对象,表示自1970年1月1...
《Ruby Way》是由Hal Fulton编写的关于Ruby编程语言的一本著作。这本书深入浅出地探讨了Ruby语言的各种特性,旨在帮助读者理解并掌握这门强大的动态脚本语言。Ruby以其简洁、优雅的语法和强大的元编程能力而备受赞誉...
BitString 是一个 Ruby 类,用于以类似“数组”的方式提供对位列表的访问。 直接寻址、分段、屏蔽等。 特征: Array 类的许多功能可用于 BitString。 问题: 未知,但请查看 GitHub 项目。 概要: require('bit...
将calculate方法添加到Ruby String类。 该方法可以执行以下数学运算: 添加 减法 乘法 分配 例子: "1 + 2".calculate # => 3 "9 - 2".calculate # => 7 "5 * 2".calculate # => 10 "15 / 3".calculate # => 5 ...
《Ruby Programming:向Ruby之父学程序设计(第2版)》是为了让完全没有程序设计经验的读者也能灵活地使用Ruby,因此书中详细地说明了各种知识。从程序所需要的变量、常数、方法、类、控制结构等语法的说明,到类的主要...
《The Ruby Way》第二版是Addison-Wesley出版社在2006年推出的一本深入浅出的Ruby编程语言教程。这本书专为初学者设计,旨在帮助读者快速掌握Ruby语言的基础和高级特性,从而轻松入门Ruby编程。Ruby是一种动态、开放...