当前位置: 代码迷 >> Ruby/Rails >> ruby学习笔记-String
  详细解决方案

ruby学习笔记-String

热度:101   发布时间:2016-04-29 02:22:30.0
ruby学习笔记--String

字符串(String)

1.创建字符串

???????Ruby中可以使用单引号和双引号两种方法来创建一个字符串。但是使用这两种方式创建特殊字符串时,效果有很大区别。

???????双引号创建字符串:Ruby会对字符串中的转义字符和特殊字符进行替换;

???????单引号创建字符串:不进行替换

示例:

puts 'This stirng \n delimited by single quotes'??????????????????#\n:换行符

puts "This stirng \n delimited by double quotes"

???????s=”Ruby”

puts 'Start to learn #{s}'?????????????????

puts " Start to learn #{s}"

------------------------------ Result -------------------------------

?????This stirng?\n?delimited by single quotes

This stirng

????????delimited by double quotes

Start to learn?#{s}

????Start to learn Ruby

?

2.%创建多行字符串

???????如果希望一个字符串由多行文本字符组成的,可以使用%表示法来创建,?共有三种形式:

???????%/ string /?:其中”/”是分隔符,可以是斜线,括号等其它字符。”string”表示是一个多行文本字符串,此形式的功能类似于双引号创建的字符串。

???????%Q/ string /?:与%/ string /?用法相同。

???????%q/ string /?:此形式的功能类似于单引号创建的字符串。

示例:

???????name="Kobe"

age = "23"

gender = "male"?

???????a=%q/

name :#{name}

age:#{age}

gender:#{gender}

/

b=%Q {

name :#{name}

age :#{age}

gender :#{gender}

}

??????

???????puts a,b

-----------------result--------------------

name:#{name}

age:#{age}

gender:#{gender}

?

name:Kobe

age:23

gender:male

?

3. Here Document

???????这是Ruby提供的别外一种多行字符串的表示形式,其格式如下:

???????<<标识符

??????????????#string

???????标识符

Note:?必须以两个”<”开头,标识符可以是任意字符,起始与结束的标识符要一致;?另外,在Here Document的语法中,还可以把”<<”后面的标识符用单引号或双引号括起来,用于确定不同的替换程度;

示例:

????????name="Kobe"

age = "23"

gender = "male"

?

a=<<info

name:#{name}

age:#{age}

gender:#{gender}

info

puts a

--------------------result-----------------------

  name:Kobe

?? age:23

?? gender:male

?

4.?字符串的常用操作

1.合并字符串:

???????+?:原有字符串的值不变

???????<<?:是在原有字符串的基础上添加另一个字符串,会修改原有字符串的值。

示例:

????????a = "this is the first string!"

b = "---second"

c = a + b

puts c,a

d = a << b

puts d,a

-------------------result--------------------------

 this is the first string!---second

 this is the first string!

 this is the first string!---second

 this is the first string!---second

?

2.替换字符串:

?????可以使用Ruby内置类中的replace方法进行字符串替换;当有一个字符串对象的内容被替换时,指定这个字符串的变量都会变化;

示例:

?????a = "this is the first string!"

b = a

puts a,b

b.replace("hellow world")

puts a,b

-----------------result------------------------

 this is the first string!

 this is the first string!

 hellow world

 hellow world

?

3.改变字符串:

常用方法如下:

方法

说明

capitalize

将字符串首字母转换成大写

upcase

将字符串中所有字母转换成大写

downcase

将字符串中所有字母转换成小写

swapcase

将字符串大写字母转换成小写,小写字母转换成大写

strip

去掉字符串中的首尾空格

lstrip

去掉字符串中左边的空格

rstrip

去掉字符串中右边的空格

chop

删除字符串中的最后一个字符

chomp

删除字符串中的最后换行符

reverse

将字符串所有的单词倒过来,并将单词中的字符也倒过来

示例:

????a = "this is the first string!"

puts a.reverse

puts a

puts a.upcase

puts a

--------------result------------------

 !gnirts tsrif eht si siht

 this is the first string!???????????#原有字符串的值没有改变

 THIS IS THE FIRST STRING!

 this is the first string!

?

4.获取或替换字符和子字符串:

?????Ruby可以使用?[]?读取字符串中的字符或子字符串,使用?[]=?方法可以替换字符串中的字符和子字符串; []?方法的参数是字符的索引,返回一个ASCII码值,可以使用chr方法把它转换为字符;

示例:

???a = "abcdefghijklmnopqrstuvwxyz"

???puts a[0]

???puts a[0].chr

???puts a[-1]?????????????????????#索引可为正数(从左开始,0开始)或负数(从右开始,-1开始)

???puts a[-1].chr

???puts a[2,5]???????????????????#从索引为2的字符开始取5个字符

???puts a[0] = "z"

???puts a

???a[10,5] = "AAAAA"

???puts a

------------result---------------------------

97

a

122

z

cdefg

Q

Qbcdefghijklmnopqrstuvwxyz

QbcdefghijAAAAApqrstuvwxyz

?

5.比较两个字符串是否相等:

?????1.?使用”==”或内置访方法?eql??来比较两个字符串内容是否相等;

?????2.?使用?equal??方法比较两个对象是否相同;

示例:

if"one" == "one"??

????puts "equal"

????else

???????puts "unequal"

????end????

if "one".eql?("one")

????puts "equal"

else

???????puts "unequal"

end

if "one".equal?("one")

????puts "equal"

else

????puts "unequal"

end

--------------------result---------------------

equal

equ??al

unequal?

?

6. <=>:比较两个字符串大小:

?????字符串比较大小时实际比较的是字母的ASCII码;

示例

puts "one" <=> "one"??

????puts "one" <=> "two"

????puts "one" <=> "apple"??

if "a" > "b"

?????????puts "a>b, true"

else

?????????puts "a>b, false"

end

---------------result------------------

0

-1

1

a>b, false

  相关解决方案