ruby重要的字符串和容器对象

看了ruby的字符串操作感觉没有java那么多的功能,但拥有的都是非常实用的,对于字符串的功能,我想所有的编程语言应该都差不多就是那么几种:显示,替换,比较,截取.

在ruby的字符串定义中,对引号的使用显得非常明显

puts "字符串的操作,对于单引号和双引号的区别,ruby会对双引号的字符串做更多的替换"
a = '把大象放到冰箱里一共分几步/n当然是三步'
b = "第一步\s打开冰箱门\n第二步\s把大象放进去\n第三步\s关上冰箱门"
puts a,b
其中,单引号的字符串并没有解析特殊字符\n,但使用双引号会对这些特殊字符进行解析,结果如下:
字符串的操作,对于单引号和双引号的区别,ruby会对双引号的字符串做更多的替换
把大象放到冰箱里一共分几步/n当然是三步
第一步 打开冰箱门
第二步 把大象放进去
第三步 关上冰箱门
另一个非常常见的是字符串的拼接

a = "原来"
b = "是这样"
c = a + b
puts a,b,c
原来
是这样
原来是这样
从上面可以看出来,a和b拼接出c,些时.a/b的值并没有变.
a << b
puts a,b
原来是这样
是这样
使用<<符号追加字符串会改变被追加的值

puts "#{a}#{b}\s"*2
原来是这样是这样 原来是这样是这样 
ruby的字符串可以运用运算符让我觉得非常独特.

content = "将被替换的内容"
a = content
puts content,a
content.replace("替换的内容")
puts content,a
a.replace("替换赋值的内容")
puts content,a,"\n"
将被替换的内容
将被替换的内容
替换的内容
替换的内容
替换赋值的内容
替换赋值的内容
但有一个从java的角度不能理解的是=的赋值操作,把content赋给a后.改变原来content的值,a的值也会跟着改变,难道这是需要从内存分配指针的角度来想?java可不会影响到a.这也说明了ruby的=赋值应该是把两个不同的句柄指向同一个堆内存.

另外有一个字符串的内置方法,比如dup.clone.ord.eql?都比较简单,看看API,在实际的使用过程中熟悉就好了

ruby有一种比较 <=>也算是比较特殊.其实也就比较两个的ascii码,左边大返回1,相等返回0,右边大返回-1,但总是感觉有点别扭,难道这是日本人和中国人的思维方式问题?

a = "a"
b = "b"
puts a.ord,b.ord
puts "<=>左边大时返回1,相等返回0,右边大时返回-1"
puts a<=>b
if "a" > "b"
	puts "a大于b"
else 
	puts "a小于b"
end
97
98
<=>左边大时返回1,相等返回0,右边大时返回-1
-1
a小于b

ruby提供两种容器,Hash表和数组:

puts "哈希表的使用"
person = Hash.new #创建一个Hash实例
person["name"] = "Wicky"
person["age"] = 20
person["sex"] = "男"
puts "person对象=>" + person.to_s
puts "size=#{person.size}"
puts "length=#{person.length}"
puts "has_key=" + person.has_key?("sex").to_s
puts "keys=#{person.keys()}"
puts "values=#{person.values}"
定义hash的方法也有两种,但内部的表现形式是一样的key=>value.上面的这些方法或属性感觉是重复的.也不知道有什么区别,比如size,length.
哈希表的使用
person对象=>{"name"=>"Wicky", "age"=>20, "sex"=>"男"}
size=3
length=3
has_key=true
keys=["name", "age", "sex"]
values=["Wicky", 20, "男"]
下面是hash的另一种定义

score = {
	"a" => 80,
	"b" => 88,
	"c" => 90
}
score.each do |key, value|
	puts key + "得了" + value.to_s + "分"
end
score.each_key do |key|
	puts "所有参与考试的人:" + key
end
total = 0
score.each_value do |value|
	puts "考出的分数:" + value.to_s
	total += value
end
puts "平均分数:" + (total/score.size).to_s
在大括号里面,用=>来关联key,value,多个值用逗号分开,对容器的遍历和之前的方法是一样的.

对score的遍历
a得了80分
b得了88分
c得了90分
所有参与考试的人:a
所有参与考试的人:b
所有参与考试的人:c
考出的分数:80
考出的分数:88
考出的分数:90
平均分数:86
另外一种容器是数组,定义方法除了普通的arr = [1,2,3]外,还有一种特殊的场合.因为ruby会将数组里一个或多个空格作为分隔符.所以如果想把这种情况的字符串转换为数组

则需要使用%w或%W.这两种的区别是%W会对转义和特殊字符进行替换,和上面的字符串声明的双引号差不多.

puts "数组的%表示方法"
arr1 = %W{上海\s  天津\s  北京\s}
arr2 = %w{上海\s  天津\s  北京\s}
p arr1,arr2
puts arr1,arr2
上面使用了p和puts来打印输出,也了解下这两者的

数组的%表示方法
["上海 ", "天津 ", "北京 "]
["上海\\s", "天津\\s", "北京\\s"]
上海 
天津 
北京 
上海\s
天津\s
北京\s
用p打印出来的是数组的对象,用puts打印的是每一个数组的元素.上面可以看到如果用%W定义的数组看不到空格特殊字符\s

字符串和容器是任何语言的基础,也是最重要的一点.实际开发中肯定会大量的用到,所以对这些的理解更为重要.除了已记录的这些基础东东,还有更多的方法和属性需要了解


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值