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

Ruby way 第二章【字符串】3 -- 继续字符串

阅读更多
接上回的字符串的学习:

清除字符串两头的空白字符(包括空格,含行,tab)
================================================================
 使用strip和strip!可以清除字符串两头所有的空白字符:
str1 = "\t \nabc \t\n"
str2 = str1.strip         # "abc"
str3 = str1.strip!       # "abc"
# str1 is now "abc" also

如果我们只想清除字符串前面或后面的的空白字符呢?在早期一点的ruby版本中没有提供现成的方法,现在我们用的最新版本中都提供了现成方法:rstrip,lstrip(rstrip!,lstrip!)。早期的话,可以通过ruby中无处不在的正则表达式来实现:

现成版:
str1 = "\t  \nabc  \t\n"
str2 = str1.rstrip                            # "abc \t\n"
str3 = str1.lstrip                             #"\t    \nabc"

正则表达式版:
str1 = "\t  \nabc  \t\n"
str2 = str1.sub(/^\s*/,"") # "abc \t\n"
#下面这个去除尾部空白的方式比较奇怪吧?但是,就是这样的。
str3 = str2.reverse.sub(/^[ \t\n]*/,"").reverse #"\t    \nabc"



生成重复的字符串
================================================================
ruby中,乘号*被重载为可以用来重复字符串:
str = "hello!" * 3 # hello!hello!hello!



在字符串中嵌入表达式
================================================================
在双引号字符串中,可以嵌入用#{ }包含的表达式:
puts "#{ temp_f} Fahrenheit is #{ temp_c} Celsius"
puts "The discriminant has the value #{ b*b - 4*a*c} ."
puts "#{ word} is #{ word.reverse} spelled backward."

对于全局变量,类变量和实例变量,可以省略大括号:
print "$gvar = #$gvar and ivar = #@ivar."


处理 逗号分隔字符串 格式的数据
==================================================================
    逗号分隔字符串是一种计算机中常用的数据交换格式,在其他语言中,我们可能需要自己来编写处理这种数据
格式,来提取它的数据。
在ruby中,处理起来非常简单,用ruby的数组就可以简单实现:
string = gets.chop!
# 假如我们输入的是: "Doe, John", 35, 225, "5'10\"", "555-0123"
data = eval("[" + string + "]") # 转换成数组
data.each { |x| puts "VALUE = #{ x} "} # 轻松区分
结果:
Value = Doe, John
Value = 35
Value = 225
Value = 5' 10"
Value = 555-0123


把字符串转换成数字
====================================================================
我们可以使用to_f和to_i方法把字符串转化成数字形式:
num1 = "237".to_i # 237
num2 = "50 ways to leave...".to_i # 50
num3 = "You are number 6".to_i # 0
num4 = "no number here at all".to_i # 0

num5 = "3.1416".to_f # 3.1416
num6 = "0.6931 is ln 2".to_f # 0.6931
num7 = "ln 2 is 0.6931".to_f # 0.0
num8 = "nothing to see here".to_f # 0.0

注意,只有在字符串最前面的数字才能被ruby找到并转换,找不到的统统返回0.

转换成8进制和16进制的数字,可以使用oct和hex方法:
oct1 = "245".oct # 165
oct2 = "245 Days".oct # 165

# Leading zeroes are irrelevant.
oct3 = "0245".oct # 165
oct4 = "-123".oct # -83

# Non-octal digits cause a halt
oct4 = "23789".oct # 237

hex1 = "dead".hex # 57005

# Uppercase is irrelevant
hex2 = "BEEF".hex # 48879

# Non-hex letter/digit causes a halt
hex3 = "beefsteak".hex # 48879
hex4 = "0x212a".hex # 8490
hex5 = "unhexed".hex # 0

没有直接转换成2进制的方法,你可以自己写:),下面是一个实现,规则和hex,oct相同:

class String

def bin
val = self.strip
pattern = /^([+-]?)(0b)?([01]+)(.*)$/
parts = pattern.match(val)
return 0 if not parts
sign = parts[1]
num = parts[3]
eval(sign+"0b"+num)
end

end

a = "10011001".bin # 153
b = "0b10011001".bin # 153
c = "0B1001001".bin # 0
d = "nothing".bin # 0
e = "0b100121001".bin # 9


统计字符串中的字符
==================================================================
count方法:
s1 = "abracadabra"
a = s1.count("c") # 1
b = s1.count("bdr") # 5 (统计b,d,r的总数)

count方法的参数可以是简单的正则表达式:
c = s1.count("^a") # 6(不是字符a的字符数量)
d = s1.count("^bdr") # 6

e = s1.count("a-d") # 9(a到d之间的字符数量)
f = s1.count("^a-d") # 2


倒置字符串
===================================================================
可以使用reverse方法(reverse!)来倒置字符串:
s1 = "Star Trek"
s2 = s1.reverse # "kerT ratS"
s1.reverse!

如果有一个句子,你只想倒置其中单词顺序,而不每个字符,怎么做?这样做:
words = %w{ how now brown cow }
words.reverse.join(" ") # "cow brown now how"

或者是这样:
phrase = "Now here's a sentence"
phrase.split(" ").reverse.join(" ") # "sentence a here's Now"


删除连续重复的字符
===================================================================
使用squeeze方法:
s1 = "bookkeeper"
s2 = s1.squeeze # "bokeper"
s3 = "Hello..."
s4 = s3.squeeze # "Helo."

你可以指定需要删除的字符:
s1 = "bookkeeper"
s2 = s1.squeeze('e') # "bookeper"


删除字符串中指定的字符
====================================================================
使用delete方法(delete! ):
s1 = "To be, or not to be"
s2 = s1.delete("b") # "To e, or not to e"
s3 = "Veni, vidi, vici!"
s4 = s3.delete(",!") # "Veni vidi vici"


打印非打印字符
====================================================================
使用dump方法,可以让非打印字符可视:
puts "hello\t\n".dump #打印出hello\t\n,\t\n原样打印出来


生成Successive(不大好翻译)字符
====================================================================
有时候我们可能需要生成这样一串字符:"aaa","aab","aac",怎么做?可以用succ方法:
droid = "R2D2"
improved = droid.succ # "R2D3"

pill = "Vitamin B"
pill2 = pill.succ # "Vitamin C"

但是,并不推荐使用上面的方式来达到我们的目的,因为如果给出的字符串太奇怪深奥,则生成出来的结果可能根本不是
你要的。我们可以用upto方法来替代:

"Files, A".upto "Files, X" do |letter|
puts "Opening: #{ letter} "
end

不过,总的来说,做这样的实现还是存在一定风险的,不能保证100%正确,书的作者也说了,暂时还没有相对可靠的方法出现。




 

分享到:
评论

相关推荐

    the ruby way 2ed

    1. **基础语法**:书中详细介绍了Ruby的基础语法,包括变量、常量、符号、字符串、数组、哈希等数据类型,以及流程控制语句(如if/else,case,循环等)。 2. **面向对象编程**:Ruby是面向对象的,书中讲解了类、...

    the ruby way

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

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

    ### Addison Wesley《The Ruby Way》第二版(2006年10月) #### 书籍概览 《The Ruby Way》是由Hal Fulton编写的关于Ruby编程语言的经典著作,该书的第二版出版于2006年10月,由Addison Wesley Professional出版社...

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

    在Ruby入门过程中,读者首先会接触到的是Ruby的基础语法,包括变量(局部、实例、类和全局变量)、数据类型(如整型、浮点型、字符串、数组和哈希)以及控制结构(如条件语句if/else、循环for、while和until)。...

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

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

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

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

    ruby实战书、代码书.rar

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

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

    3. 面向对象:Ruby的万物皆对象,包括基本类型如整数和字符串,这使得编程更加面向对象。 4. 哲学:Ruby的设计理念是“编程应当让人愉快”,其语法旨在提高可读性和减少冗余代码。 接下来,我们关注Rails框架的...

    ruby on rails资料

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

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

    - **数据库配置**: 详细讲解如何为Rails项目配置数据库,包括连接字符串和迁移策略。 - **应用程序密钥**: 强调了保护应用程序密钥的重要性,并介绍了Rails提供的解决方案。 - **日志记录**: 介绍了Rails的日志记录...

    Ruby之路

    1. **基础语法**:Ruby的基本数据类型(如整数、浮点数、字符串、数组、哈希等),流程控制结构(如条件语句、循环、异常处理)以及函数和方法的定义与调用。 2. **面向对象编程**:Ruby是一种纯面向对象的语言,...

    ruby入门

    1. 面向对象:Ruby的万物皆对象,就连基本的数据类型如整数、字符串和布尔值都是对象,具有方法调用的能力。 2. 动态类型:无需预先声明变量类型,Ruby会自动根据赋值确定变量类型。 3. 自动内存管理:Ruby采用垃圾...

    ruby入门书中文版

    Ruby的核心特性包括其强大的面向对象支持,它将一切视为对象,包括基本类型如数字和字符串。这使得代码更加简洁且易于理解。此外,Ruby还具有块(blocks)、 Proc 和 Lambda,这些是用于处理代码片段的强大工具,常...

    Ruby语言入门教程

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

    Шоу -- Легкий способ выучить 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