`
zarknight
  • 浏览: 148210 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ruby way 第二章【字符串】

阅读更多
重定义字符串的比较
=================================
字符串的比较<,<=,>,>=其实是四个方法,他们都会调用<=>这个方法,我们可以

重新定义<=>来改变比较的行为:

class String
    alias old_compare <=>

    def <=>(other)
      a = self.dup
      b = other.dup
    
      a.gsub!(/[\,\.\?\!\:\;]/, "")
      b.gsub!(/[\,\.\?\!\:\;]/, "")
    
      a.gsub!(/^(a |an |the )/i, "")
      b.gsub!(/^(a |an |the )/i, "")
   
      a.strip!
      b.strip!
    
      a.old_compare(b)
  end

end


title1 = "Calling All Cars"
title2 = "The Call of the Wild"

# 未重定义之前,以下结果会是yes,但现在,将变成no
if title1 < title2
  puts "yes"
else
  puts "no"         
end

但是,==不会调用<=>,因此,如果我们要定义特殊的“比较是否相等”,则我

们需要覆盖==这个方法。


切分字符串
===========================================================
默认的字符串切分符号是空格。
s1 = "It was a dark and stormy night."
words = s1.split          # ["It", "was", "a", "dark", "and",

"stormy", "night"]

也可以指定切分符:
s2 = "apples, pears, and peaches"
list = s2.split(", ")     # ["apples", "pears", "and peaches"]

s3 = "lions and tigers and bears"
zoo = s3.split(/ and /)   # ["lions", "tigers", "bears"]


splite方法的第二个参数用来限制切分的返回结果个数,具体效果规则如下:
1.如果省略这个参数,则切分结果中末尾为null的结果将被压缩掉
2.如果是正数,则结果按照指定的限制数量进行切分,尾部的null结果也将会保

留做为结果
3.如果是负数,则切分结果数量无限制,并且保留尾部的null结果。
例如:
str = "alpha,beta,gamma,,"
list1 = str.split(",")     # ["alpha","beta","gamma"]
list2 = str.split(",",2)   # ["alpha", "beta,gamma,,"]
list3 = str.split(",",4)   # ["alpha", "beta", "gamma", ","]
list4 = str.split(",",8)   # ["alpha", "beta", "gamma", "", ""]
list5 = str.split(",",-1)  # ["alpha", "beta", "gamma", "", ""]


格式化字符串
======================================================================
Ruby的字符串格式话沿用了C的格式,在C中可用于sprintf或printf的格式话字

符在Ruby中同样适用:
name = "Bob"
age = 28
str = sprintf("Hi, %s... I see you're %d years old.", name, age)

String类有个%方法,可以方面的做格式化的工作,它接受任何类型的单个值或

一个数组:
str = "%-20s  %3d" % [name,age]
上面这个和下面这个式子是等效的
str = sprintf("%-20s  %3d", name, age)


我们还可以使用ljust,rjust,center方法来格式化我们的字符串:
str = "Moby-Dick"
s1 = str.ljust(13)    #"Moby-Dick    "
s2 = str.center(13)     #"  Moby-Dick  "
s3 = str.rjust(13)    #"    Moby-Dick"


控制字符串的大小写
==========================================
Ruby的String类提供了一组丰富的方法来控制大小写:
s = "Hello,World"
s1 = s.downcase    #"hello,world"
s2 = s.upcase     #"HELLO,WORLD"

capitalize方法把字符串第一个字符变大写,其余都是小写:
s3 = s.capitalize    #"Hello,world"

swapcase则是把字符串中的每个字符的大小写转换一下(原来大写的都小写,反

之亦然):
s = "HELLO,world"
s1 = s.swapcase     #"hello,WORLD"

这些方法都有相应的in-place方法

(upcase!,downcase!,capitalize!,swapcase!)

虽然,Ruby没有提供内置的判断字符是否是大小写的方法,但是,这不是问题,

我们可以通过正则表达式来完成这一点:
if string =~ /[a-z]/
  puts "string contains lowercase charcters"
end

if string =~ /[A-Z]/
  puts "string contains uppercase charcters"
end

if string =~ /[A-Z]/ and string =~ /a-z/
  puts "string contains mixed case"
end

if string[0..0] =~ /[A-Z]/
  puts "string starts with a capital letter"
end


字符串的子串
=============================================
Ruby提供了多种访问操作字符串子串的方式,我们可以来看一下:
1.如果给出一组数字,则第一个数字代表取字符串的偏移位置,第二个数字表示

取的长度:
str = "Humpty Dumpty"
sub1 = str[7,4]         # "Dump"
sub2 = str[7,99]        # "Dumpty" (超过的长度按实际长度来取)
sub3 = str[10,-4]       # nil (长度为负数了)

记住,上面的形式,很多从别的语言转过来的ruby初学者会认为给出的两个数字

是子串的开始和结束位置的偏移,这是错误的,务必记住。


给出的偏移是负数也是可以的,这样,位置将从字符串末尾开始计算:
str1 = "Alice"
sub1 = str1[-3,3]   # "ice"

str2 = "Through the Looking-Glass"
sub3 = str2[-13,4]  # "Look"


我们也可以给出一个Range来取子串:
str = "Winston Churchill"
sub1 = str[8..13]    # "Church"
sub2 = str[-4..-1]   # "hill"
sub3 = str[-1..-4]   # nil
sub4 = str[25..30]   # nil

强大的是,正则表达式在这个时候也充分发挥着作用:
str = "Alistair Cooke"
sub1 = str[/l..t/]   # "list"
sub2 = str[/s.*r/]   # "stair"
sub3 = str[/foo/]    # nil


如果给出的是一个字符串,则如果目标字符串中含有这个给出的字符串,则返回

这个给出的字符串,否则返回nil:
str = "theater"
sub1 = str["heat"]  # "heat"
sub2 = str["eat"]   # "eat"
sub3 = str["ate"]   # "ate"
sub4 = str["beat"]  # nil
sub5 = str["cheat"] # nil

如果给出的是一个数字,则返回的是该数字对应索引处字符的ASCII码:
str = "Aaron Burr"
ch1 = str[0]     # 65
ch1 = str[1]     # 97
ch3 = str[99]    # nil


同样,我们不仅可以通过上面的方式访问子串,还可以来向字符串设置内容:
str1 = "Humpty Dumpty"
str1[7,4] = "Moriar"     # "Humpty Moriarty"

str2 = "Alice"
str2[-3,3] = "exandra"   # "Alexandra"

str3 = "Through the Looking-Glass"
str3[-13,13]  = "Mirror" # "Through the Mirror"

str4 = "Winston Churchill"
str4[8..13] = "H"        # "Winston Hill"

str5 = "Alistair Cooke"
str5[/e$/] ="ie Monster" # "Alistair Cookie Monster"

str6 = "theater"
str6["er"] = "re"        # "theatre"
str7 = "Aaron Burr"
str7[0] = 66             # "Baron Burr"


未完...

 

分享到:
评论

相关推荐

    ruby的二进制字符串与hex互转,二进制字符串与整数互转的工具函数

    本资源是ruby代码,提供了一系列封装好的函数,用于快速进行转换,一个函数搞定,包括如下转换,二进制字符串与hex字符串的互转。二进制字符串与整数互转,包括uint8,uin16,uint32, 以及本地字节序和网络字节序两种...

    ruby基础教程(第四版)第14章 字符串类1

    在本章“ruby基础教程(第四版)第14章 字符串类1”中,我们将深入探讨Ruby中的字符串处理方法和特性。 首先,创建字符串在Ruby中有多种方式。你可以使用双引号或单引号,双引号允许内嵌表达式展开,而单引号则不会...

    Ruby-Stringex一些实用的Ruby字符串扩展类

    在Ruby的世界里,字符串操作是常见的任务之一。为了增强字符串处理能力,开发者们创建了许多库,其中Stringex是一个非常实用的扩展库。本文将深入探讨Stringex库,介绍其提供的各种实用方法,帮助你更好地理解和利用...

    The Ruby Way(第2版)

    The Ruby Way(第2版) &lt;br&gt;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 ...

    Ruby-Unicode字符串调试帮助

    在Ruby编程语言中,处理Unicode字符串是一项常见的任务,尤其是在全球化和多语言应用的开发中。Unicode是一个广泛采用的标准,它包含世界上几乎所有的字符集,使得跨语言的数据交换变得可能。然而,由于Unicode的...

    The Ruby Way--3rd Edition--2015-英文版

    The Ruby Way 第三版(英文版),全书22章,书中包含600多个按主题分类的示例。每个示例都回答了“如何使用Ruby来完成”的问题。 ——Ruby on Rails之父David Heinemeier Hansson倾力推荐!

    THE RUBY WAY(中文版)(第二版)pdf

    《The Ruby Way 第二版》中文版采用“如何解决问题”的方式阐述Ruby编程,书中包含400多个按主题分类的示例。每个示例都回答了“如何使用Ruby来完成”的问题。首先对要完成的任务进行了描述,并讨论了技术方面的约束...

    Ruby 字符串处理

    Ruby将字符串像数字一样处理.我们用单引号(‘…’)或双引号(…)将它们括起来. ruby&gt; abc  abc ruby&gt; ‘abc’  abc 单引号和双引号在某些情况下有不同的作用.一个由双引号括起来的字符串允许字符由一个前置的斜杠...

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

    最近有个需求,需要根据一个字符串当作一个类来使用,例如: 有一个字符串 “ChinaMag”,根据这个字符串调用 类 ChinaMag下的方法。 解决办法: 1.rails可以使用 constantize方法。 代码如下: pry(main)&gt; ...

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

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

    用string拆分字符串

    8. **Ruby中的字符串拆分** Ruby的`split`方法非常直观: ```ruby str = "apple,banana,grape" fruits = str.split(",") puts fruits # 输出:apple\nbanana\ngrape ``` 以上就是不同编程语言中使用`string`...

    Ruby-GeoPattern从字符串创建漂亮的生成几何背景图像

    Ruby-GeoPattern是一个开源库,由Jason Long 创建,它允许开发者根据输入的任意字符串生成美观的几何背景图像。这些图像可以用于网站设计、图形艺术或其他任何需要独特视觉元素的地方。GeoPattern利用了Ruby语言的...

    字符串压缩

    标签中的“源码”意味着可能涉及具体实现代码,而“工具”可能是指使用某种编程工具或者库(如Ruby的`zlib`库)来实现字符串压缩功能。对于学习和开发,理解这些基础概念并能实际操作是十分重要的,特别是在处理...

    the ruby way 2ed

    这本书的第二版在2006年出版,由Addison-Wesley出版,作者通过深入浅出的方式,揭示了Ruby语言的强大功能和优雅特性。 Ruby是一种动态类型、面向对象的编程语言,它的设计理念是注重简洁和生产力,让开发者能够更...

    多行字符串的表示方式

    在编程领域,尤其是在Ruby语言中,处理多行字符串是一个常见的需求。标题“多行字符串的表示方式”聚焦于如何在代码中优雅地表示跨越多行的文本。Ruby提供了多种方法来处理这样的情况,使得代码更加易读且维护性更强...

    分割字符串函数 分割字符串函数

    在编程领域,分割字符串函数是处理文本数据时非常常用的一种工具。它允许我们将一个长字符串按照特定的分隔符拆分成多个子字符串,方便我们进行后续的分析、处理或存储。这里,我们将深入探讨字符串分割函数的相关...

    Ruby元编程第二版中文

    这本书“Ruby元编程第二版”专注于讲解Ruby语言的这一独特特性,旨在帮助开发者更好地理解和利用Ruby的元编程能力。 元编程的基本概念是程序能够自省、修改自身或者在运行时生成新的代码。在Ruby中,元编程的强大之...

    字符串和时间戳相互转换

    在编程领域,字符串和时间戳之间的转换是常见的操作,尤其在处理日期和时间相关的功能时。时间戳(Timestamp)通常表示为自1970年1月1日(UTC/GMT的午夜)以来的秒数,不考虑闰秒。而字符串则可以是多种格式的日期和...

Global site tag (gtag.js) - Google Analytics