接上回的字符串的学习:
清除字符串两头的空白字符(包括空格,含行,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%正确,书的作者也说了,暂时还没有相对可靠的方法出现。
分享到:
相关推荐
本资源是ruby代码,提供了一系列封装好的函数,用于快速进行转换,一个函数搞定,包括如下转换,二进制字符串与hex字符串的互转。二进制字符串与整数互转,包括uint8,uin16,uint32, 以及本地字节序和网络字节序两种...
The Ruby Way 第三版(英文版),全书22章,书中包含600多个按主题分类的示例。每个示例都回答了“如何使用Ruby来完成”的问题。 ——Ruby on Rails之父David Heinemeier Hansson倾力推荐!
Stringex 一些实用的Ruby字符串扩展类
1.将2个字符串合并为新的字符串 2.扩展原有的字符串 1.index方法和rindex方法, index从左往右检查字符串是否存在,找到后返回首个字符串的索引
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 ...
Ruby将字符串像数字一样处理.我们用单引号(‘…’)或双引号(…)将它们括起来. ruby> abc abc ruby> ‘abc’ abc 单引号和双引号在某些情况下有不同的作用.一个由双引号括起来的字符串允许字符由一个前置的斜杠...
GeoPattern - 从字符串创建漂亮的生成几何背景图像
Unicode字符串调试帮助
the ruby way the ruby way
博客“ruby+selenium-webdriver测试--第一个例子源代码”
1.返回字符串的长度 代码如下: str.length => integer 2.判断字符串中是否包含另一个串 ...3.字符串插入 代码如下: str.insert(index, other_str) => str “abcd”.insert(0, ‘X’) #=> “Xabcd” “abcd”.i
最近有个需求,需要根据一个字符串当作一个类来使用,例如: 有一个字符串 “ChinaMag”,根据这个字符串调用 类 ChinaMag下的方法。 解决办法: 1.rails可以使用 constantize方法。 代码如下: pry(main)> ...
《The Ruby Way 第二版》中文版采用“如何解决问题”的方式阐述Ruby编程,书中包含400多个按主题分类的示例。每个示例都回答了“如何使用Ruby来完成”的问题。首先对要完成的任务进行了描述,并讨论了技术方面的约束...
mingw32-ruby-1.9.1-wxruby-2.0.1-setup.exe
Fuzzy-string-match是用于ruby的模糊字符串匹配库。 很快(用RubyInline用C编写) 它仅支持Jaro-Winkler距离算法。 该程序是从Lucene 3.0.2手动移植的。 (lucene是Java产品) 如果要添加其他字符串距离算法,...
在Ruby中的String对象持有和操纵的任意序列...反斜杠也可以转义另一个反斜杠,这样第二个反斜杠本身不是解释为转义字符。 以下是字符串相关的功能Ruby的。 表达式替换: 表达式替换嵌入任何Ruby表达式的值转换成字符串使
ruby-1.8.7-p72-i386-mswin32.zip
ruby-debug-ide-0.3.1.gem
sqlite3-ruby-mswin32.gem
受 Java、Ruby 和 Python 等其他高级语言的启发,我开发了一组字符串操作函数,以便更方便地处理字符串。 这里给出了一个简要的内容列表 strjoin:使用用户指定的分隔符连接多个字符串 strsplit:从字符串中提取由...