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

Ruby way 第二章【字符串】2 -- 关于字符串的内容可真多,有些东西一时半会用不到,可临时查

阅读更多
在字符串中做替换操作
=========================================
我们已经知道sub和gsub的基本用法了,我们来看它们的更加高级的用法。同时还有这两个方法

的in-place方法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 }   # "Don't forget the maps."

s4.sub!(/spam/) {  |m| m.reverse }      # s4 is now "Don't forget the maps."

如上面的例子中所示,\1,\2等符号可以用来把匹配到的结果作为替换的内容来使用

全局变量$&中存放着最后一次匹配到的内容。


搜索字符串
===========================================
index方法用来查找给出的子串,字符或正则表达式在字符串中的起始位置。如果没找到,则返

回nil
str = "Albert Einstein"

pos1 = str.index(?E)     # 7
pos2 = str.index("bert") # 2
pos3 = str.index(/in/)   # 8
pos4 = str.index(?W)     # nil
pos5 = str.index("bart") # nil
pos6 = str.index(/wein/) # nil

rindex方法将会从字符串的最右边开始查找:
str = "Albert Einstein"
pos1 = str.rindex(?E)     # 7
pos2 = str.rindex("bert") # 2
pos3 = str.rindex(/in/)   # 13 (finds rightmost match)
pos4 = str.rindex(?W)     # nil
pos5 = str.rindex("bart") # nil
pos6 = str.rindex(/wein/) # nil

include?方法用来判断字符串中是否包含所给出的内容:
str1 = "mathematics"
flag1 = str1.include? ?e         # true
flag2 = str1.include? "math"     # true
str2 = "Daylight Saving Time"
flag3 = str2.include? ?s         # false
flag4 = str2.include? "Savings"  # false

scan方法则会扫描整个字符串,把匹配结果收集起来:
str1 = "abracadabra"
sub1 = str1.scan(/a./)    #["ab","ac","ad","ab"]

str2 = "Acapulco, Mexico"
sub2 = str2.scan(/(.)(c.)/)    #[["A","ca"],["l","co"],["i","co"]]

如果使用了block,则匹配结果会被传到block中:
str3 = "Kobayashi"
str3.scan(/[^aeiou]+[aeiou]/) do |x|
    print "Syllable: #{ x}\n"
end

结果是:
Syllable: Ko
Syllable: ba
Syllable: ya
Syllable: shi


在字符和ASCII之间相互转换
============================================
在ruby中,字符本身就是整数:
str = "Martin"
print str[0]   #77

如果一个整数直接被追加到字符串中,则它会被转换成字符:
str2 = str << 111  #"Martino"

length和size方法的作用是一样的,都是用来计算字符串的长度:
str1 = "Carl"
x = str1.length      # 4
str2 = "Doyle"
x = str2.size      # 5


处理一行的字符串
======================================
Ruby一个字符串中可以包含很多行。举个例子,我们可以把一个很小的文件(其中有多行数据)读

取到内存中,存放在一个字符串中。字符串默认的each方法可以处理这些行。
str = "Once upon\na time...\nThe End\n"
num = 0
str.each do |line|
    num += 1
    print "Line #{ num} : #{ line}"
end
输出结果为:
Line 1 : Once upon
Line 2 : a time...
Line 3 : The End


处理字节
=========================================
字符串的each_byte迭代方法用来逐个处理字符串的每个字节
str = "ABC"
str.each_byte do |char|
    print char, " "
end
结果:
65 66 67


向字符串追加内容"<<操作符"
============================================
str = "A"
str << [1,2,3].to_s << " " << (3.14).to_s  # 结果:A123 3.14

如果0~255范围的数字追加到字符串中,则它会被转换成字符:
str = "Marlow"
str << 101 << ", Christopher"  # 结果: Marlowe, Christopher


删除尾部的换行符和其他字符
==============================================
使用chop方法来删除尾部字符:
str = gets.chop         # Read string, remove newline
s2 = "Some string\n"    # "Some string" (no newline)
s3 = s2.chop!           # s2 is now "Some string" also
s4 = "Other string\r\n"
s4.chop!                # "Other string" (again no newline)

记得,chop和chop!在字符串尾部没有换行符号的情况下,会删除最后一个非换行字符:
str = "ABC"
str.chop      # AB

如果不想要上面的效果,请用chomp:
str = "ABC"
str.chomp    # ABC

str = "xyz\n"
str.chomp    # xyz

chomp方法可以带一个参数,这样的作用是可以用来删除字符串尾部和参数匹配的内容:
str = "abcxyz"
str.chomp("xyz")   # abc

str1 = "abcxyz"
str1.chomp("D")    # abcxyz

 

 

分享到:
评论

相关推荐

    the ruby way 2ed

    《The Ruby Way 2nd Edition》是一本深入探讨Ruby编程语言的经典著作,旨在帮助读者全面理解和掌握Ruby的精髓。这本书的第二版在2006年出版,由Addison-Wesley出版,作者通过深入浅出的方式,揭示了Ruby语言的强大...

    the ruby way

    《The Ruby Way》第二版是Addison-Wesley出版社在2006年10月出版的一本关于Ruby编程语言的权威指南。这本书深入浅出地介绍了Ruby语言的核心特性和高级用法,旨在帮助读者全面理解和掌握Ruby的精髓。通过阅读这本书,...

    Addison.Wesley.The.Ruby.Way.2nd.Edition.Oct.2006.chm

    《The Ruby Way》第二版是Addison-Wesley出版社在2006年推出的一本深入浅出的Ruby编程语言教程。这本书专为初学者设计,旨在帮助读者快速掌握Ruby语言的基础和高级特性,从而轻松入门Ruby编程。Ruby是一种动态、开放...

    Addison Wesley The Ruby Way 2Nd Edition Oct 2006.pdf(英文版)

    《The Ruby Way》是由Hal Fulton编写的关于Ruby编程语言的经典著作,该书的第二版出版于2006年10月,由Addison Wesley Professional出版社发行。本书共包含888页的内容,提供了丰富的示例来帮助读者理解和掌握Ruby...

    ruby实战书、代码书.rar

    1. **Ruby基础**:书中会介绍Ruby的基本语法,包括变量、常量、数据类型(如字符串、数字、数组、哈希)、控制结构(如条件语句、循环)以及函数和方法的使用。 2. **面向对象编程**:Ruby是纯面向对象的语言,书中...

    The Ruby Way(处理文件和目录)

    **模式字符串**: 可以通过指定第二个参数来设置文件的打开模式。常见的模式有: - `"r"`:只读模式,默认模式。 - `"w"`:写入模式,会清空文件内容或创建新文件。 - `"a"`:追加模式,在文件末尾添加内容。 - `"r+...

    Ruby语言教程&案例&相关项目资源.docx

    2. **面向对象**:Ruby的一切都是对象,包括基本的数据类型如数字和字符串。这种设计使得Ruby具备了强大的面向对象编程能力,支持类、模块、继承、多态等特性。 3. **动态类型**:作为动态类型语言,Ruby中的变量...

    ruby on rails资料

    学习Ruby时,需要掌握关键字、符号、字符串、数组、哈希等数据类型,以及如何进行异常处理和文件操作。 接着是“ruby中文文档”,这通常包括官方文档的中文版,涵盖了Ruby的各个方面,如标准库、API、语言规范等。...

    Ruby之路

    《Ruby之路》是关于Ruby编程语言的一本详细指南,作者旨在揭示“Ruby之道”,即如何在Ruby编程中运用有效的解决方案和技术。第二版于2006年10月由Addison-Wesley出版,它全面地涵盖了Ruby语言的核心概念、语法特性...

    ruby-on-the-way:学习 ruby 和 rails 相关资料

    在IT行业中,Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而受到开发者喜爱。Rails是基于Ruby构建的一款开源Web应用框架,它遵循MVC(模型-视图-控制器)架构模式,极大地...

    ruby入门书中文版

    在压缩包中,"ror_v0.2.pdf"可能是一本关于Ruby on Rails的教程或指南,涵盖了从基础到进阶的RoR开发内容,包括路由设置、数据库迁移、控制器行为、模型关系、测试等。读者可以通过阅读这本书来学习如何创建动态网页...

    Obie Fernandez, Kevin Faustino, Vitaly Kushner - The Rails 4 Way - 2014

    ### 关于《The Rails 4 Way》一书的知识点概览 #### 书籍基本信息 - **作者**: Obie Fernandez、Kevin Faustino 和 Vitaly Kushner。 - **出版时间**: 2014年6月3日。 - **出版社**: Leanpub。 - **标签**: Rails。...

    Ruby语言入门教程

    数组、字符串、正则表达式和迭代器、代码块、闭包是Ruby语言在实际编程中不可或缺的部分,掌握它们对于高效编程是必不可少的。 最后,元编程部分将探讨Ruby语言中动态添加方法和属性,以及操作类和模块的能力,这是...

    ruby入门

    Ruby是一种面向对象的、动态类型的编程语言,由日本的松本行弘于1995年设计并开发。它的设计理念是让编程变得简单而优雅,强调代码的可读性和简洁性。Ruby在很多方面与Perl、Python和Smalltalk有相似之处,但其语法...

    Шоу -- Легкий способ выучить Python 3 -- 2019.pdf

    - **Python 3**是Python的最新版本,与Python 2相比,它在字符串处理、Unicode支持以及一些语法方面进行了改进。 #### 知识点二:《Learn Python 3 the Hard Way》书籍概述 - 本书由**Zed A. Shaw**编写,是一本...

Global site tag (gtag.js) - Google Analytics